使用fgets从文件中读取

我正在阅读格式文件

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 。 你必须使用fgets的返回值(它在eof或error上返回NULL ,否则返回指针):

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

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