【问题标题】:feof(in) != EOF doesn't make while loop stop when at the end of file? [duplicate]feof(in) != EOF 在文件末尾时不会使 while 循环停止吗? [复制]
【发布时间】:2015-11-06 18:03:08
【问题描述】:
int main ()
{
    FILE *in;
    in = fopen("input.txt","r");
    char c = fgetc(in);
    while(feof(in) != EOF)
    {
    printf("%c",c);
    c = fgetc(in); 
    }
}

feof(in) != EOF 不会阻止 while 循环停止,但类似 ​​!feof(in) 的东西似乎可以工作。有什么想法吗?

【问题讨论】:

标签: c file


【解决方案1】:

feof 不会在文件末尾返回 EOF;它返回true,它不等于EOF

fgetc 在到达文件结尾时返回EOF。你的代码应该写成

int main ()
{
    FILE *in;
    in = fopen("input.txt","r");
    int c = fgetc(in);             // note int not char
    while(c != EOF)                // compare c to EOF
    {
      printf("%c",c);
      c = fgetc(in); 
    }
}

您不应将feof 用作循环条件,因为它不会返回true,直到您尝试读取文件末尾之后之后,这意味着您的循环将执行一次太频繁。

【讨论】:

  • 但请注意,他的代码中的循环条件总是在读取后立即发生,除非循环条件为真,否则他不会使用c...所以使用feof() 应该可以也。
  • 注意:这个好的解决方案和 OP 之间的细微差别(如果是 while(!feof(in)))。如果出现文件结尾或输入错误,此代码将退出循环。 OP 的代码(已更正)仅在文件结束时退出循环,
猜你喜欢
  • 1970-01-01
  • 2011-12-15
  • 2012-11-21
  • 1970-01-01
  • 2019-01-29
  • 2013-11-22
  • 2012-08-10
  • 2015-12-30
  • 2021-08-18
相关资源
最近更新 更多