web-dev-qa-db-ja.com

fgetsを使用してファイルから読み取る

フォーマットのファイルから読み込んでいます

1 32 43 23
32 43
123 43 54 243 
123 2222
2

これが私のコードスニペットです。

string[100];
while(!feof(fp))
    fgets(string,100,fp)

ここで、すべての文字列を入力すると、最後の文字列に繰り返しといくつかのあいまいさが生じます(他の何かが123などと表示されるように)。

この問題を解決するには?

12
Kraken

fgets の戻り値を確認する必要があります。読み取りが成功した場合、fgetsは、渡されたバッファーへのポインターを返します(例ではstring)。ファイルの終わりが検出され、文字が読み込まれていない場合、fgetsNULLを返します。

これを試して:

char string[100];
while(fgets(string, 100, fp)) {
    printf("%s\n", string);
}
21
dasblinkenlight

eofに到達しただけ最後にあるファイルから読み取ろうとしました。代わりにfgetsの戻り値を使用する必要があります(eofまたはエラーでNULLを返し、それ以外の場合はポインターを返します)。

char string[100];
while(fgets(string, 100, fp))
    // do stuff with string

このように戻り値を確認すると、条件内ではなく、ループ本体の内部のeofにヒットすることはありません。

6
Seth Carnegie