使用fgets从文件读取

Kra*_*ken 12 c fgets file-read

我正在阅读格式文件

1 32 43 23
32 43
123 43 54 243 
123 2222
2
Run Code Online (Sandbox Code Playgroud)

这是我的代码片段.

string[100];
while(!feof(fp))
    fgets(string,100,fp)
Run Code Online (Sandbox Code Playgroud)

现在,当我把每一个字符串放在最后一个字符串中时,我会得到重复和一些更多的歧义(比如其他东西也会被打印出来说是123左右).

如何解决这个问题呢?

das*_*ght 21

您需要检查fgets的返回值.如果读取成功,fgets则将指针返回到传递给它的缓冲区(即string在您的示例中).如果遇到文件结尾且未读取任何字符,则fgets返回NULL.

试试这个:

char string[100];
while(fgets(string, 100, fp)) {
    printf("%s\n", string);
}
Run Code Online (Sandbox Code Playgroud)

  • @ManuelReis你是对的,`feof`测试不必要(编辑). (2认同)
  • 谢谢你的答案,我有一秒钟的存在危机. (2认同)
  • 由 `printf` 发出的内部 `\n` 不是必需的,因为它已经通过文件内部的 `fgets()` 来了(如果存在的话)。 (2认同)

Set*_*gie 6

eof只达到后,你已经尝试从一个文件,是在结束时读取.你必须使用return的返回值fgets(它返回NULLeof或error,否则返回指针):

char string[100];
while(fgets(string, 100, fp))
    // do stuff with string
Run Code Online (Sandbox Code Playgroud)

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