[C语言][总结] getchar()清除缓冲区

getchar()是最近看C语言教程看到的函数,大三的时候学C语言吊儿郎当,隐约听过老师说过这个函数,似乎与清除缓冲区有关,今天终于彻底了解了。

A.getchar()的使用

看一段代码,它实现的功能是输出我们输入的字母:

[C语言][总结] getchar()清除缓冲区_第1张图片

输入a,它输出a。这里getchar()的功能是获取键盘输入的字母,搭配putchar()来进行一个输出。

来看看while语句括号内的内容:

ch=getchar(),这个ch在此前声明为int类型,而我们输入的a是字符,看起来出现了矛盾。其实原因是:getchar()的处理过程为,读取字符,然后返回字符的ASCII码。这个赋值语句的内容也就是将getchar()从缓冲区内获得的字符的ASCII码赋给ch了。

ch=getchar()!=EOF,这个EOF的英文全称是“end of file”,如果getchar()读取字符失败,那么它会返回这个EOF。

经过以上的解释,就可以知道getchar()的用法了。

B.getchar()用于清除缓冲区

看一段代码,它的功能是输入一段密码,然后确认密码,输出确认失败或输出成功:

[C语言][总结] getchar()清除缓冲区_第2张图片

 运行,假设密码是123456,结果为:

[C语言][总结] getchar()清除缓冲区_第3张图片

不知道发生了什么啊?马上发一个提问看看。

反正输出的时候输入完123456按回车,会立马打印“确认失败”。这是因为,输入123456时,键盘将“123456\n”写入到缓冲区,scanf会读取“123456”,那么缓冲区就还剩下“\n”。继续往下走,getchar就会将“\n”读取,然后判断不等于’Y',打印“确认失败”。

要想正确运行,就需要将缓冲区中的“\n”去掉,可以使用getchar()来清空缓冲区:

[C语言][总结] getchar()清除缓冲区_第4张图片

我们在这里插入一个getchar(),那么它就会在下一个if语句之前,将缓冲区中的“\n”拿走,到if语句的时候,缓冲区就什么也没有了,等我们输入‘Y’或'N'时,进行判断。

但如果密码是123456 abc呢?

这种情况下,代码运行的过程是:

键盘向缓冲区中写入“123456 abc\n”,然后scanf拿走空格前的“123456”,缓冲区就还剩下“ abc\n”。如何清除那么多符号呢?——写一个while循环:

[C语言][总结] getchar()清除缓冲区_第5张图片 

这样,通过getchar()就不断地将缓冲区中的字符全部吸入了,达到了清空缓冲区的目的! 

 

你可能感兴趣的:(c语言,开发语言,后端)