输入缓冲区

首先了解 getchar()    putchar()   scanf()

getchar()的作用是读取一个字符,同时返回值为对应字符的ASCII值,若读取失败返回值为EOF;

注:getchar()在使用时不用给参数

putchar()是打印所给数字对应的ASCII字符;

注:putchar()在使用时一定要给参数

scanf()的读取是遇到空格和'\n'终止,简单来说就是只读取空格和'\n'之前的内容;

  对于上述代码为什么输入一个A按回车后光标会跑到下一行呢?

这就引入了输入缓冲区这个概念;其实getchar()每次拿字符是从输入缓冲区中拿的,并且一次只能拿一个字符。

刚开始输入缓冲区里什么也没有,然后在键盘上输入A再按回车,此时输入缓冲区里就有了两个字符,分别是'A'和'\n'。(注:这里的\n是提示getchar()已经输入完毕)   而getchar()只将字符'A'拿走,放到ch里,判断打印ch,然后while循环中getchar()再一次将输入缓冲区里的'\n'拿走,判断打印'\n',所以就用了上述情况。

             

getchar()输入缓冲区键盘

                                                              'A'   '\n'             

为什么要了解输入缓冲区

 在此背景输入密码'123456'后,系统直接输出'确认失败',并没有给机会在屏幕上输入'Y'或'N'。因为此时输入缓冲区里有'123456\n'这些字符,而scanf()只拿走了'123456',(注:'\n'是提示scanf()输入完毕,继续执行代码)   放到password中,而getchar()将输入缓冲区中剩余的'\n'取走了,直接进行了if判断,所以没有给机会输入。

上述代码中多加入了一个getchar(),它的作用是清理缓冲区 ,就是将上次遗留的'\n'清除,此时输入缓冲区里就为空了,遇到第二个getchar()就需要进行输入。

加深理解

 上面说过scanf()的读取是遇到空格和'\n'终止,上诉代码中scanf()只将'123456'放到password中,而此时输入缓冲区中就不止一个字符,所以用一个getchar()去清理缓冲区显然是不行的。

 上述代码利用while循环进行缓冲区清除可以很好的解决这一问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值