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

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

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

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

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

你可能感兴趣的:(C)