提问人:Qualcomm 提问时间:7/15/2020 更新时间:7/15/2020 访问量:272
将 EOF 与 Getchar () 函数的错误区分开来 [duplicate]
Distinguish EOF from error for the Getchar () function [duplicate]
问:
重写程序以区分 EOF 和 Getchar () 函数的错误。换句话说,getchar()在错误期间和EOF文件末尾都会返回,您需要区分这一点,输入不应该通过FILE STREAM并处理putchar()函数错误。
#include <stdio.h>
int main() {
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf ("%ld\n", nc);
}
答:
0赞
Adrian Mole
7/15/2020
#1
您可以使用以下参数检查 feof(
) 或 ferror(
) (或两者) 的返回值:stdin
FILE*
#include <stdio.h>
int main() {
long nc;
nc = 0;
while (getchar() != EOF) ++nc;
printf ("%ld\n", nc);
if (feof(stdin)) printf("End-of file detected\n");
else if (ferror(stdin)) printf("Input error detected\n");
// Note: One or other of the above tests will be true, so you could just have:
// else printf("Input error detected\n"); // ... in place of the second.
}
评论
0赞
HolyBlackCat
7/15/2020
您应该始终获得一个或另一个,因此可能可以替换为 .else if (...)
else
0赞
Adrian Mole
7/15/2020
@HolyBlackCat 是的,确实如此(见编辑)。但是,我想演示这两个函数调用的用法。
0赞
chux - Reinstate Monica
7/15/2020
迂腐:在采用与 相同大小的不常见平台(一些旧图形处理器)上,两者都可能不成立。但几乎不需要为这种畸变编码。如果代码是由于第一个输入错误和下一个文件末尾造成的,则可以同时获得 true。unsigned char
int
getchar(); while (getchar() != EOF) ++nc;
评论
feof
ferror
EOF
stdin
stdin
FILE*