💬键盘缓冲区
- 给大家提一个问题难道想scanf和getchar这样的
- 接收函数难道是直接从键盘上接收函数吗?
⛳️说明:
👑 其实他们之间还有一个函数缓冲区的概念。
scanf
和getchar
函数和键盘之间有一个键盘缓冲区- 键盘输入之后把数据放到缓冲区然后再进行读取
scanf 演示
- 📜说明:当我们缓存区如上图时什么都没有
scanf( )
函数就会等待
📖 运行错误的原因
- 📌 而当我们输入
123456
然后换 缓存区中存的是123456
加上\n
这回车换行符
- 🌱 这时我们的scanf就会把缓冲区中的123456给存到数组中去。
- 🌱 但是\n这个字符还是留了下来没被清理掉。
所以我们的getchar函数看到里面有内容。
就不进行等待直接读取了。
搜嘎这时我们程序出现错误的原因就找到了。原因找到,就好解决了,既然是换行符\n被清理了导致的。
那么我们就把\n提前清理就好了。
🎬 原因找到,实战开始!
📚 解决方法
📑 方法一:
- 🌱 最简单的方法,我们单独放上一个getchar()把换行符\n提前读取了就好了
#include <stdio.h> int main() { //123456 char password[20] = {0}; printf("请输入密码:>"); scanf("%s", password);//123456 abc printf("请确认密码(Y/N):"); char input = 0; getchar();//\n if ('Y' == input) printf("确认成功\n"); else printf("确认失败\n"); return 0; }
- 📌但是这种代码只适合这一种场景,不全面没有完全解决问题。
- 📌用我们的古话来说就是治标不治本。
- 📌当我们换个场景输入
123456 abc
的时候又错误了
- 我们来一起好好分析一下?
- ⛳️而getchar只能清理一个字符所以会出现下面这种情况
- 我们的getchar直接就把b读取给input变量了导致if判断为读取失败。
📑 方法二:
- 🌱前面说了错误原因getchar( )只读取了一个字符,那么用循环清理掉多个字符不就好了。
- 🌱让getchar() 只要没有读取错误就一直循环!就完美解决错误啦!
#include <stdio.h> int main() { //123456 char password[20] = {0}; printf("请输入密码:>"); scanf("%s", password);//123456 abc printf("请确认密码(Y/N):"); char input = 0; //清理掉缓冲区中剩余的数据 while (getchar() != '\n') { ; } input = getchar(); if ('Y' == input) printf("确认成功\n"); else printf("确认失败\n"); return 0; }
循环解决缓冲区
总结
✅ 归纳:
好了以上就是关于getchar()函数的用法,和关于缓冲区的概念就讲完了!
getchar的参数
getchar的返回值
EOF的讲解
缓冲区概念的讲解
☁️ 学会这些大家就不会再为,scanf函数和getchar函数使用时找不到错误而发愁了!
看到这里了还不给博主扣个⛳️ 点赞
☀️收藏
⭐️ 关注
!
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。