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仅在您尝试从末尾的文件中读取后才能到达。您必须使用的返回值fgets代替(它返回NULLeof 或 error 以及它在其他情况下给出的指针):

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

像这样检查返回值将导致您永远不会像另一个一样在循环体内点击 eof,而不是在条件中。

于 2012-02-24T16:23:21.983 回答