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

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

A.getchar()的使用

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

输入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()用于清除缓冲区

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

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

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

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

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

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

但如果密码是123456 abc呢?

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

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

 

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

 

  • 18
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值