C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

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');
    }

这样当每次输入后,会强制清空标准输入流。