フォーマットのファイルから読んでいます
1 32 43 23
32 43
123 43 54 243
123 2222
2
これが私のコードスニペットです。
string[100];
while(!feof(fp))
fgets(string,100,fp)
さて、すべての文字列を入れると、最後の文字列に繰り返しといくつかのあいまいさが生じます(他の何かが123などと印刷されるように)。
この問題を解決する方法は?
fgetsの戻り値を確認する必要があります。読み取りが成功した場合fgets
は、渡したバッファーへのポインターを返します(つまりstring
、この例では)。ファイルの終わりが検出され、文字が読み取られていない場合は、をfgets
返しますNULL
。
これを試して:
char string[100];
while(fgets(string, 100, fp)) {
printf("%s\n", string);
}
最後にあるファイルから読み取ろうとした後にのみ、eof
に到達します。代わりにの戻り値を使用する必要があります( eofまたはerrorと、それ以外の場合に指定されたポインターを返します)。fgets
NULL
char string[100];
while(fgets(string, 100, fp))
// do stuff with string
このように戻り値をチェックすると、他のループのように、条件ではなく、ループの本体の内側でeofにヒットすることはありません。