feof(in)!= EOF在文件结尾处循环停止时没有停止?

时间:2015-11-06 18:03:09

标签: c file

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)这样的东西似乎有效。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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,这意味着你的循环将经常执行一次。