15

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

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

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

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

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

この問題を解決する方法は?

4

2 に答える 2

24

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

これを試して:

char string[100];
while(fgets(string, 100, fp)) {
    printf("%s\n", string);
}
于 2012-02-24T16:23:41.407 に答える
7

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

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

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

于 2012-02-24T16:23:21.983 に答える