6.3.3 C语言的输入和输出问题
请看下面的代码。
#include<stdio.h> int main(void) { putchar(getchar()); putchar(getchar()); putchar(getchar()); putchar('\n'); }
输入a,按下Enter键,输入b,按下Enter键后,运行就结束了。运行结果为:
a a b b
这是因为当你输入a并按下Enter键时,系统得到两个字符,一个是a,另一个是Enter键。所以系统会输出a和回车符,这是第2个a的由来。第一个a以及紧接着的Enter回车符都是用户输入的,它们作为getchar的返回值返回给putchar。所以第2个a和紧接着的Enter键就是putchar的两次返回值。b的产生过程同理。其实,b后面还有个Enter键,只是没在意而已。
造成上述问题的原因是没有清空缓冲区里数据,我们可以将程序修改为如下形式。
#include<stdio.h> int main(void) { putchar(getchar()); fflush(stdin); putchar(getchar()); fflush(stdin); putchar(getchar()); putchar('\n'); }
这样当每次输入后,会强制清空标准输入流。