解决 gcc 编译后 fflush 失效

保留现场

使用scanf()获取输入时,因为涉及键盘缓冲区的问题,每次输入后想要把缓冲清空,但是在 gcc 编译后,使用fflush无法清空缓冲区。

探究原因

C 标准 (ISO/IEC 9899:1999 standard) 规定fflush(stdin)操作是未定义的<参看《ISO/IEC 9899:1999 standard》p270>;。也就是说不一定能实现刷新功能,但有的编译器可能不遵循标准,对fflush(stdin)操作不予警告,并且有时可能产生正确的结果,但最好不要这样使用。

解决方法

通过 while 循环把输入流中的余留数据“吃”掉:

int c;
while ((c=getchar()) != ‘\n’ && c != EOF);