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);
}
}