说我有以下内容......
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);
我想知道2 ???之间是否有任何区别?对EOF的测试是否有任何区别?
答案 0 :(得分:2)
我想知道2 ???之间是否有任何区别?对EOF的测试是否有任何区别?
是的,测试c != EOF
会带来巨大的变化。 getchar()
如果检测到标准输入上的错误或文件结尾,则返回EOF
。这两者都是完全可能的。 getchar()
返回EOF
后,可能会在每次后续调用时再次返回EOF
,因此不测试EOF
的版本可能会无法进入{{1}}循环。