为什么使用 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= 的版本] 有进入无限循环的风险。