为什么使用 EOF 检查标准输入缓冲区是否被清除
why use EOF to check if stdin buffer is cleared
假设我有以下...
int main () {
char name [5] = "";
char c;
printf("Enter a name: ");
fgets(name,5,stdin);
while ((c = getchar()) != '\n');
printf("Exiting...);
getchar();
return 0;
}
while 循环将清除 stdin 缓冲区,但我也看到循环是这样完成的...
while ((c = getchar()) != '\n' && c != EOF);
我想知道两者之间是否有任何区别???测试 EOF 有什么不同吗?
I am wondering if there is any difference between the 2??? Does testing for EOF make any difference?
是的,测试 c != EOF
有很大的不同。 getchar()
returns EOF
如果它在标准输入上检测到错误或文件结束。这两种情况都是完全可能的。一旦 getchar()
returns EOF
,它很可能在随后的每次调用中再次 return EOF
,所以不测试 [=12= 的版本] 有进入无限循环的风险。
假设我有以下...
int main () {
char name [5] = "";
char c;
printf("Enter a name: ");
fgets(name,5,stdin);
while ((c = getchar()) != '\n');
printf("Exiting...);
getchar();
return 0;
}
while 循环将清除 stdin 缓冲区,但我也看到循环是这样完成的...
while ((c = getchar()) != '\n' && c != EOF);
我想知道两者之间是否有任何区别???测试 EOF 有什么不同吗?
I am wondering if there is any difference between the 2??? Does testing for EOF make any difference?
是的,测试 c != EOF
有很大的不同。 getchar()
returns EOF
如果它在标准输入上检测到错误或文件结束。这两种情况都是完全可能的。一旦 getchar()
returns EOF
,它很可能在随后的每次调用中再次 return EOF
,所以不测试 [=12= 的版本] 有进入无限循环的风险。