getchar()的使用方法——给scanf当爹又当妈

一、getchar()的基本用法
getchar()函数的功能是从缓冲区中读取一个字符,注意,是一个字符。当缓冲区中没有字符可以读取时,getchar()就会等待我们输入一个字符,然后把它读走,相反,如果缓冲区中存在字符,getchar()就不等我们输入,直接读取缓冲区中的字符。与此对应的是putchar(),它能够向终端输出一个字符。
例1
如下图,当我们输入一个字符a时,getchar()从缓冲区中把它读取,之后,putchar()把getchar()读取的字符a输出。
在这里插入图片描述

与scanf不同,getchar()能够读取空格、回车等,而scanf遇到空格与回车时,会结束读取,所以此时,一般scanf读走输入数据后,会留下如\n等的字符,而如果我们还要再次调用scanf的话,缓冲区中还有\n,此时scanf不等我们输入数据,就直接把\n读走了,从而不能达到我们的目的。
例2
下面第一张图,当输入一个w后,我们按下回车,此时第一个scanf把w读走,缓冲区中还剩下\n,第二个scanf不等我们输入就直接读走了\n。注:这种情况是输入类型为字符时才会直接读取\n,如果换成像字符串这样的内容时,scanf还是会等待我们输入。
第二张图,我们可以看到w下面换了一行,这时就是getchar()读取了回车,putchar()把换行输出了。此时,就需要getchar()来帮它了
在这里插入图片描述
在这里插入图片描述

二、getchar()——清除\n等字符
当我们输入字符后,按下回车键,缓冲区中还存在\n字符,如果想再次使用scanf,就得将其清除,我们就要用到getchar()
例3
如下图,当我们用getchar()清理掉第一个scanf读取字符后留下的\n时,第二个scanf就能正常使用了。
在这里插入图片描述
那我们上面提到了,scanf在遇到空格时也会停止读取,如果我们输入了一个字符串:abcd ef时,scanf只会把abcd读走,缓冲区中还留下了 ef以及回车\n,此时一个getchar()只能读取一个字符,并不能把它们都读完,此时,我们就可以用循环来处理了。如下图所示
在这里插入图片描述
当getchar()读取到\n时,跳出循环,putchar()也把 ef输出了,ef后的a是第二个scanf读取的。
这里我们看到要想使用scanf时会遇上一些问题需要getchar()帮它解决,这样才能更好地使用scanf。所以getchar()才给scanf“当爹又当妈”。

三、getchar()的结束标志——EOF(end of file)
在这里插入图片描述
如果我们想停止使用getchar(),可以用ctrl+z停止,上图我们可以看到当我们打出ctrl+z时,putchar()并没有进行打印。并且要在未输入字符时使用,若已经输入了字符,则还是会执行。而end of file是文件结束的标志,本质上是-1,getchar()接受的是字符类型,字符又对应着ASCII码值,ASCII码值都为正数,所以EOF会使getchar()停止使用,而且我们也由此知道,getchar()返回值为整型。

  • 416
    点赞
  • 1697
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WoLannnnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值