当前位置:网站首页>【C语言】getchar()函数缓冲区
【C语言】getchar()函数缓冲区
2022-04-22 17:32:00 【平凡的人1】
目录
专栏:《C语言从0到1》
送给各位的一句话:种一棵树最好的时间是十年前,其次是现在
说明:无论如何,当我们下定决心的时候,那就是来得及的,你只管努力,剩下的交给天意!
前言
大家好啊,由于之前有关C语言的博客写的比较少,不够详细,加之较少的时间写博客,但是我会尽己所能,把每一篇博客写好,帮助自己复习的同时,我也希望能够帮助到大家,让我们一起努力学习吧。接下去,我会陆续更新并且完善关于专栏《C语言从0到1》这个系列,如果大家有需要的,一起学习的,记得点赞关注加收藏哦!
下面,进入我们的主题getchar()函数
gethcar()函数的介绍
首先,我们要知道getchar()的作用是读取一个字符。我们可以打开cplusplus官网看一看相关介绍:
int getchar ( void ); 从 stdin 获取字符 返回标准输入 (stdin) 中的下一个字符。 它等效于以 stdin 作为参数调用 getc。
参数:无
️返回值:成功时,将返回字符读取(提升为
int值)。 返回类型为int以适应特殊值 EOF,这表示失败: 如果标准输入位于文件末尾,则该函数返回 EOF 并设置 stdin 的 eof 指示符 (feof)。 如果发生其他读取错误,该函数也会返回 EOF,但会改为设置其错误指示器(ferror)。
这是中文版的介绍。下面我们来看看一个代码️


getchar()是接收一个字符,而putchar()就是一个打印字符。
想想我们为什么用int类型,而不是用char类型?
看看上面的介绍,会返回EOF,EOF又是什么东西呢?

EOF是-1,我们最好用int来接收,char类型只有一个字节。我们继续来看看一段代码:


我们每输入一个字符,那就打印一个字符,那我们该怎么去停止呢?
很简单,让getchar返回EOF的方法是:CTRL+Z我们来看看结果怎么样:

此时光标会直接停下来
此时我们还要知道为什么会自动换行:我们输入完以后,还按了一次回车,按了回车之后,其实缓冲区有2个字符。下面,来说说缓冲区问题️
缓冲区
我们还是来看看这一串代码:

getchar()是直接从键盘读取字符吗?不是,与键盘之间有一个缓冲区,输入缓冲区。当输入缓冲区什么都没有的时候,getchar()此时就会等待:如一开始运行后光标一直在闪。当我们输入a的时候,我们需要回车,相当于给缓冲区输入一个a和\n。当getchar()读取的时候读取到a,a!=EOF,打印,继续下去遇到\n换行,进入下一行,这就是为什么会自动换行!
所以,我们可以知道getchar()可以用来清理缓冲区
知道了这些,getchar()到底有什么用呢?我们可以来举个例子

先来看看我们这段代码想要干什么——我们一开始想输入密码,然后输入Y/N确认密码是否正确,可是实际情况是什么呢?

在我们输完密码之后,就直接输出NO了,都不需要确认,这是为什么呢?原因就是一开始scanf();我们输入的时候敲回车,scanf只把缓冲区中123456拿走,还剩下\n,而\n就被getchar()拿走了,都不需要我们输入了。这就是为什么会直接打印,我们不需要输入。
那怎么去改进呢?
我们可以多加一个getchar()去清理缓冲区


但是这种写法完全正确了吗?不一样啊这只是临时去处理一下而已

当我们加了空格之后,又出现了改进之前的情况,为什么这样子呢?scanf()实际上只读到空格之前就结束了,然后getchar()会遇到很多字符或者空格,但由于能力有限。
这时候如果缓冲区有很多字符的时候,我们该怎么办?循环解决呗


这时候就顺利解决完上面存在的问题了!
结束语
本次博客有关getchar()函数介绍就到这里了,如果觉得还不错的话,请多多支持哦!你的支持是我最大的动力!

版权声明
本文为[平凡的人1]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_60478154/article/details/124334172
边栏推荐
- 关于闭包的7道面试题
- De duplication of array objects and finding corresponding object data in array objects
- 发起成立波场联合储备,孙宇晨向美联储发起“挑战”
- Opendaylight analysis of SDN learning (4)
- Regular matching URL
- 京东一面:子线程如何获取父线程 ThreadLocal 的值?我蒙了。。。
- Notes on deep learning (I) -- loss function
- 工业互联网创新迭代的推手
- Minimum number of jumps at home - C language DFS
- Quick off-line solution of LCA
猜你喜欢

Will Liu is a tiktok bit.

Detonate the most bombs - C language DFS recursive approach

工业互联网创新迭代的推手

Ansible of operation and maintenance automation -- (playbook mode)
![[golang] force buckle leetcode - 657 Whether the robot can return to the origin (simulation)](/img/b1/035c907253739a3e8c68b5934fd4e0.png)
[golang] force buckle leetcode - 657 Whether the robot can return to the origin (simulation)

Detailed explanation of kubernetes (VII) -- service object deployment and Application

如何通过云效Codeup完成代码合并 | 云效

Design from 0_ Rc522 read / write card based on stm32f1

长安LUMIN首次高调亮相,三大产品力矩阵将迎来新变革

锚定美元的USDD,如何引领数字货币变革
随机推荐
Regular matching URL
非线性优化问题---MATLAB
Notes on deep learning (I) -- loss function
Quick off-line solution of LCA
Gradual change
盘点 6 个 牛牛牛牛牛 的开源项目
JS实现常见的六大排序
锚定美元的USDD,如何引领数字货币变革
ES6 Promise对象
[ES6] extension operator, symbol, iterator
Opendaylight analysis of SDN learning (5)
How can the AVI file exported from PR be read by ImageJ?
Nonlinear optimization problem three -- matlab
元宇宙离我们有多远?博鳌论坛上大咖这样说
tbb concurrent_multiset/concurrent_set unsafe_erase() 崩溃
Red team attack and defense knowledge sharing - Red Sun security team shooting range 1 - Express version
Array object concatenation
面向全球市场,PlatoFarm今日登录HUOBI等全球四大平台
Introduction to webrtc: 4 Rtcpeerconnection connects audio and video streams
MySQL配置参数和命令
