注:scanf()函数和getchar()函数都是从输入流区中取值的,并非直接读取键盘输入值
例:
scanf("%d",&a);
此时你从键盘敲进一个数字12, 那么缓冲区里面不仅存放了一个数字12,还有一个换行符'\n';
但程序只会让a读进数字12;那么缓冲区还有存放在一个'\n'。
举几个应用实列:
该程序原本先要实现求键盘多次输入的数字之和,但显然这程序存在问题,浅看一下输出结果先:
显然,此程序还没有让我判断是否继续就结束了!!!
原因很简单,我们判断是否继续的条件是ch=='y'||ch=='Y';而我们在输入数字的时候缓冲区还存放着一个换行符’\n‘,我们的getchar()要先获取这个换行符,显然换行符不符合判断条件,程序结束。在我代码的第8行中注释也提到了一种解决方案,就是在ch = getchar();前面再写多一行代码ch = getchar();,其目的是获取掉’\n‘,第二个ch = getchar();就可以获取键盘输入缓冲区的新值了。
但这只能获取掉一个缓冲区的字符,如果在输入数字的时后面按了很多空格键呢?
那缓冲区就不仅有一个数字,还有一堆空格字符,还有一个换行符。这个时候还是要实现该程序的话就要在ch = getchar();前清除缓冲区
清除缓冲区用到的是rewind(stdin);函数,此函数包含在stdio.h头文件中
最后程序呈现:
测试: