为什么使用EOF来检查stdin缓冲区是否被清除

时间:2016-09-23 18:36:46

标签: c stdin eof

说我有以下内容......

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的测试是否有任何区别?

1 个答案:

答案 0 :(得分:2)

  

我想知道2 ???之间是否有任何区别?对EOF的测试是否有任何区别?

是的,测试c != EOF会带来巨大的变化。 getchar()如果检测到标准输入上的错误或文件结尾,则返回EOF。这两者都是完全可能的。 getchar()返回EOF后,可能会在每次后续调用时再次返回EOF,因此不测试EOF的版本可能会无法进入{{1}}循环。