关于getchar/putchar/缓冲区的理解

文章讨论了C语言中getchar和scanf函数在处理用户输入时,特别是涉及密码输入场景下,如何处理缓冲区中的 字符。当使用scanf读取密码后,剩余的 可能被getchar意外接收,导致程序逻辑错误。解决方案是使用循环和getchar函数来清除缓冲区中的额外字符。
摘要由CSDN通过智能技术生成

        getchar 意思是获取一个输入的字符,获取成功返回值为该字符所对应的ASCII码的值,获取失败,返回值为-1(EOF),所以他的返回值的规定为int 。

        putchar 意思是在屏幕上打印输入的字符。

        缓冲区指的是scanf getchar 这两个函数,并不是直接从键盘上去获取数据,而是从缓冲区里去拿到数据,键盘上输入的字符,先会放在缓冲区里 。。输入密码并且确(Y/N)。

输入的密码为123456,scanf在缓冲区里拿走了123456,因为scanf函数默认拿走\n前面的数据,\n默认为是想讲密码输入进去,并无实际意义。

但是后面的getchar函数呢,发现了\n,直接拿走了,导致运行结果如下图(因为只有Y才能确认成功,\n不能)。

程序并没有等待我去输入(Y/N),就直接确认失败了。

方法:用一个getchar去拿走\n:

 运行结果如下;

但是如果密码是123456 abc又不能成功了,键盘上输入的是123456 abc\n

        因为,scanf又只是拿走了123456,而后面的空格abc\n,没有拿走,此时一个getchar已经不能解决问题了。

 我们采用循环使用getchar:

 条件虽然是,获取的字符不是\n,但是最后一次会拿走\n并且跳出循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值