小白对getchar()函数的认知

今天跟随小洛来学习一下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()函数也算是有一定了解了吧!如果有什么讲错的地方,还请斧正!本人也刚接触编程不久,希望以后同大家一起努力!

【生命不息,学习不止,让每一天都充满知识和进步】

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值