1

ファイルから情報を取得し、そのデータを配列に格納するという課題が与えられました。ファイル内のデータは次のようにソートされます

ニューヨーク 40 43 N 74 01 W

最初の 20 文字は都市の名前で、その後に緯度と経度が続きます。緯度と経度は、いくつかの方法で簡単に取得できます

fscanf(infile, "%d(または%c私が得ているものに応じて)", pointer)

動作しますので問題ありません。

私の問題は、都市名の一部にスペースが含まれているため、都市名の文字列を収集する方法がわからないことです。区切り記号の使用について何かを読みましたが、読んだところ、行全体を読み取るために使用されているようです。ファイルから都市名を読み取り、スペースを含む名前全体を文字配列に格納する方法はありますか? ありがとう。

4

7 に答える 7

1

fscanf()ヒントは次のとおりです。区切り文字がスペースのみの場合、都市名と緯度がどこから始まるかをどのように見分けることができますか? 「行全体を読むために使用されるようです」に近づいています。おそらく でそれを調べてfgets()ください。

于 2009-11-10T18:18:27.587 に答える
0

「男のfgets」から:

char *fgets(char *s, int size, FILE *stream);

fgets() は、stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。EOF または改行の後、読み取りは停止します。改行が読み取られると、バッファに格納されます。'\0' は、バッファー内の最後の文字の後に格納されます。

fgets() は、成功した場合は s を返し、エラーの場合、または文字が読み取られていないときにファイルの終わりが発生した場合は NULL を返します。

これは、20 文字の文字列を格納するには 21 文字の文字配列が必要であることを意味します (21 文字目は末尾の '\0' 区切り文字になり、fgets は自動的に配置します)。

幸運を!

于 2009-11-10T18:40:42.923 に答える
0

scanf()指定子で使用できる文字数は限られてい"%c"ます。

注意終端の null バイトは追加されません。

char cityname[21];
scanf("%20c%d%d %c%d%d %c", cityname,
      &lat1, &lat2, &lat_letter,
      &lon1, &lon2, &lon_letter);
cityname[20] = 0;

fgets()ただし、文字列を「手動で」使用して解析する方がよいでしょう。そうしないと、END-OF-LINE の問題が発生します。

于 2009-11-10T18:41:18.703 に答える
0

ヒント: メモリ内の行全体を読み取り、最初の 20 文字で都市名を取得し、次の 10 文字で緯度などを取得します。

于 2009-11-10T18:33:21.607 に答える
0

%c指定したサイズの文字ブロックを収集するサイズを指定できます。あなたの場合、都市名が 20 文字の長さの場合%20cscanf.

次に、ターミネーターを最後に置き、文字列をトリミングする必要があります。

于 2009-11-10T18:34:08.663 に答える
0

こんばんは

都市名の最初の数字である緯度までスキャンしているので、最初のアイテムに数字以外のスキャンを使用することはできますか?

于 2009-11-10T18:19:30.713 に答える
0

都市名にスペースが含まれている場合は、区切り文字を使用するか、都市名フィールドを固定長に定義する必要があります。それ以外の場合、「Salt Lake City」などの 3 単語の都市名を解析しようとすると、次のフィールドが強制終了されます。

于 2009-11-10T18:31:57.257 に答える