今天跟随小洛来学习一下getchar()函数吧!
首先我们看getchar这个单词,字面意思是【得到字符】,再来看官方定义
Get character from stdin【从stdin获取字符】 (stdin是标准输出的意思,一般指键盘输入到缓冲区里的东西)
简单来说getchar()函数会返回用户从键盘输入的一个字符,使用的时候不会带有任何的参数。
调用的时候需要在程序中包含 <stdio.h>头文件
【注意】getchar()是一个整体,不能在括号中加变量
程序运行到这个命令时就会暂停,等待用户从键盘输入,相当于使用scanf()函数读取了一个字符。例如:
与scanf()函数相比,getchar()函数除了本身调用时的语法格式不同外,getchar()函数在读取的时候不会忽略起首的空白字符,总是会返回当前读取的第一个字符。而scanf()如果起首为空白字符,那么程序会直接结束。
【空白字符】:也可简称“空白符”,通俗理解就是不会显示出来的字符,类似空格符、回车换行符、制表符之类的字符,从视觉效果上来看,只是一个空白的区域而已。
先来看scanf()函数
可以看到当起始字符是空格时,程序直接结束,并不会执行打印输出语句。
再来看getchar()函数
当getchar()函数读取时,根据程序它会直接打印从键盘输入的第一个字符,这里就是空格字符,我们这里用“-”便于大家直观地看到空格的存在。
这时有同学发出疑问了,getchar函数不是获取的字符吗,为什么用int整型变量来接收呢?
这里给出两种解释:
1.getchar函数获取字符后,返回的是字符的ASCll码值,而ASCll码值是整数,所以用整型变量来接收。
2.getchar函数在读取失败的时候,会返回常量EOF【End Of File】,由于EOF通常是-1,所以返回值类型要设为int,而不是char。
下面举两个getchar()函数的简单用法
这个示例中,编译器只有读到的字符等于换行符(\n),才会退出循环,常用来跳过某行。
这里的while循环的循环体没有任何语句,表示对该行不执行任何操作。
该函数还可以统计某一行的字符长度
getchar()函数除了上述基本的用法外,还有一个作用——清理输入缓冲区
举个简单的例子:
我们可以看到在上面的程序中,学生等级这一部分出现了问题。在学生学号输入完成之后,程序直接跳过了等级的输入阶段,直接进入了入学年份的输入部分。那么这种情况就是因为我们没有清理scanf函数的输入缓冲区导致的。
什么意思呢?我们先来了解一个概念——输入缓冲区
输入缓冲区:这是一个我们键盘输入与编译器读取之间的一个缓冲区域,编译器并不是直接读取我们在键盘上输入的信息,而是从输入缓冲区中读取信息。
在上述程序之中
这里输入的换行符(键盘上体现为敲回车)是为了告诉编译器——伙计,你可以停止读取了。但是当第一个scanf函数在读取了 5 这个的数据之后,'\n'这一字符仍然留在缓冲区中,那么当我们继续调用scanf函数读取数据的时候,正巧下一个要输入的变量为char类型,所以不等我们输入,停留在缓冲区中的'\n'被下一个scanf函数读取并被当作rank的值使用,而'\n'由于属于空白字符,在视觉上我们看不到。于是在窗口上体现为直接跳过了等级输入的阶段。
那么这时候我们拿出我们的getchar()函数用来清理缓冲区便可解决这一个问题,请看示例代码
讲到这里相信大家对getchar()函数也算是有一定了解了吧!如果有什么讲错的地方,还请斧正!本人也刚接触编程不久,希望以后同大家一起努力!
【生命不息,学习不止,让每一天都充满知识和进步】