保留现场
使用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);