C语言:清理缓冲区

目的:输入一段字符(密码),然后如果输入Y,则会返回确认(密码)成功,如果输入N,则会返回确认(密码)失败。

提前须知:getchar——获取(输入)一个字符

                   putchar——输出一个字符

                  getchar 读取失败时会返回EOF

                   scanf 输入时,读取到字符串时,遇到空格就结束了

                  数组名本来就是地址,scanf 的时候不用取地址

先定义一个变量来存需要输入的密码,提示用户输入密码,比如:

接下来就可以提示用户输入Y或者N,来确定自己所输入的密码,具体见下图:

但是,这个时候,就会发现,还没来得及输入Y或者N,就已经有显示提示:确认失败。

其中的原因就是,每次你输入完密码的时候,想要执行下一步,会按回车键,这时候,执行换行命令,会产生一个 \n,这个 \n 会被存在缓冲区中,但下面运行 getchar 输入的时候,会把这个 \n  输入到 getchar 中,\n 当然不属于Y或者N,所以就会直接打印:确认失败。

那么,遇到这种情况,应该怎么解决呢?

我们可以在确认密码之前,就把缓冲区中的 \n 取走,这时,就可以使用 getchar 来把 \n 输入到这当中来,这样就不会影响下面的操作,所以,清理缓冲区的完整代码就出来了:

 最后,就是继续我们的推广环节了,因为上面的这个代码只能用在输入的密码中不含空格的(scanf 函数读取字符串时,遇到空格就结束了),这时候,就要推广到有空格也能正常运行了。

基本的骨架是不变的,主要是要在中间环节加入循环,来一个一个地将输入的值储存在一个变量中(注:这里不能存到缓冲区中去,不然就会跟一开始说到的错误一样,会一直显示确认失败),直到识别到 \n 的时候,才停止。

这样,就能实现我们想要的推广了,完整的代码见下图:

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡欣致

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值