当前位置:网站首页 > 技术博客 > 正文

getchar()!=的功能



getchar——读取字符的函数

int getchar(void)

返回类型为int,参数为void.
有人可能会有疑惑,getchar既然是读取字符的,为什么返回类型是int呢?
1、getchar其实返回的是字符的ASCII码值(整数)。
2、getchar在读取结束或者失败的时候,会返回EOF。


EOF意思是end of file,本质上是-1.

下面我们一起来看看下面这段代码什么意思

 
  

意思是
getchar先读取一个字符放到ch里面去,如果这个字符不等于EOF,就进入循环,打印这个字符。当getchar读到文件末尾或者结束时,它会返回一个EOF,此时结束循环。
我们来运行试一下
在这里插入图片描述
输入A,输出A;输入b,输出b…
当我们想要结束时,输入ctrl+Z,再按回车即可。




注意,如果上面的代码不用while循环的话,输入123,putchar()只会输出1。因为一个getchar一次只能读取一个字符。

1、代码达不到理想效果

我们再来看看下面这段代码

 
  

按理说,我们是想要输入密码,然后再输入N或者Y,根据我们输入的是N还是Y打印“确认成功”或“确认失败”。
我们来运行一下,看看是否是这样
在这里插入图片描述
可以看到,我们还没有输入Y或N,他就立马跳出来了一个“确认失败”
为什么会是这样呢?
请添加图片描述




(1)原理详解

我们来看看它其中的原理:
scanf和getchar都是输入函数,它们都是从键盘上来读取我们的数据,但它们不是直接从键盘上来读取我们的数据。它们和键盘之间有一个区域叫缓冲区
输入函数先来看缓冲区中是否有数据,如果有,它直接就拿走了,不需要从键盘输入,如果缓冲区什么都没有,则需要从键盘输入,再拿走。
在这里插入图片描述
明白这个道理后,我们回到上面那串代码。
最开始缓冲区里没有东西,所以我们这行代码




scanf(“%s”, password);

就是从键盘输入密码,我们输入。为了让放进去,我们还敲了一个回车,所以缓冲区里为


在这里插入图片描述

int ch = getchar();

getchar用来接收字符,
在这里插入图片描述
getchar看到缓冲区中有数据( ),直接取走,不需要从键盘输入。自然也就出现了我们上面运行结果的那一幕:还没输入N或Y,就立马跳出“确认失败”了。

(2)解决措施

那么我们怎么解决这个问题呢?
很自然就能想到需要先把缓冲区里清空
那我们就在前面加一个getchar把缓冲区中的“ ”给清理掉。
即代码变为


 
  

运行一下即可发现,现在能够得到我们的理想结果。
在这里插入图片描述

2、输入的密码中有空格

(1)原理详解

首先缓冲区里没有东西,我们需要通过键盘输入密码 789,
在这里插入图片描述
然后scanf就来取缓冲区中的数据,当它读到空格的时候,它就不再读了(这是scanf的一个作用性质)。
所以scanf就只取走了,而缓冲区中还剩下(空格) 789 。
在这里插入图片描述



再往下,运行到这行代码,然而这里只有一个getchar,它只能读取一个字符,也就是只读了空格,缓冲区中还剩789 。
在这里插入图片描述
再往下,就是我们的这行代码
getchar()一来就取走了缓冲区中的7,根本不需要我们从键盘输入N或Y。运行时自然它就自动跳出了“确认错误”。


(2)解决措施

所以我们需要把缓冲区中的东西先全部清走
那我们就用一个循环,只要没读到 ,我们就一直用getchar读


 
  

整段代码如下:

 
  

运行一下
在这里插入图片描述
是我们想要的效果。

以上就是关于getchar的用法的实例解析。如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。
关注我,让我们一起学习,一起成长吧!请添加图片描述

  • 上一篇: 后端管理系统模板
  • 下一篇: java的工具
  • 版权声明


    相关文章:

  • 后端管理系统模板2025-09-24 15:00:59
  • xmlserializer转换json2025-09-24 15:00:59
  • flutter eventbus2025-09-24 15:00:59
  • 图像相似性度量方法2025-09-24 15:00:59
  • getline函数的作用2025-09-24 15:00:59
  • java的工具2025-09-24 15:00:59
  • 跳表算法2025-09-24 15:00:59
  • 678hk鼠标键盘记录器2025-09-24 15:00:59
  • c++结构体和c结构体2025-09-24 15:00:59
  • 归并排序百度百科2025-09-24 15:00:59