C 费奥夫(in)!=EOF不';当文件结束时,是否使while循环停止?

C 费奥夫(in)!=EOF不';当文件结束时,是否使while循环停止?,c,file,C,File,feof(in)!=EOF不会停止while循环,而是类似于!feof(in)似乎起作用了。有什么想法吗?feof不会在文件末尾返回EOF;它返回true,它不等于EOF fgetc到达文件末尾时将返回EOF。你的代码应该写成 int main () { FILE *in; in = fopen("input.txt","r"); char c = fgetc(in); while(feof(in) != EOF) { printf("%c",c)

feof(in)!=EOF不会停止while循环,而是类似于
!feof(in)
似乎起作用了。有什么想法吗?

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

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

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

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

你知道EOF实际上是什么吗?文件结束指示符更改
feof(in)!=EOF
只需
!feof(in)
在这种情况下,
feof
是否返回
EOF
?但是,请注意,他的代码中的循环条件总是在读取后立即发生,除非循环条件为真,否则他不会使用
c
。。。因此,使用
feof()
也应该有效。注意:这个好的解决方案和OP之间的细微差别(如果是
而(!feof(in))
)。如果出现文件结尾或输入错误,此代码将退出循环。OP的代码(已更正)仅在“文件末尾”退出循环,
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); 
    }
}