getchar()所起的清空行作用

while (getchar() != ‘\n’) continue;清空行作用的原理:
下面程序代码实现的功能是输入一个字符和两个数字,第一个数字表示显示字符的行数,第二个数字表示每行显示字符的个数
代码一:
在这里插入图片描述
这段代码能够实现功能,但只能使用一次,一次后就打印Bye了。
代码二:
在这里插入图片描述
在这里插入图片描述这段代码能够实现功能并且能够重复使用。经过分析和查阅资料后整理如下:(1)当程序调用getchar()函数时,程序就等着用户按键,用户输入的所有字符(包括空格、换行符、制表符等符号)被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。也就是说,后续的getchar()函数调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。(注意,getchar()函数的返回值是int类型。)
(2)getchar()会逐个读取每一个字符,包括空格、换行符和制表符。scanf()读数字时,会跳过空格、换行符和制表符。
(3)所以,在代码一中,当读完
在这里插入图片描述后,结果应该是putchar(‘\n’)在缓存中留下一个换行符。所以再次回到主函数中进行第二次while循环时,getchar()会读到这个换行符(getchar()不会跳过这个换行符),从而使程序不满足while((ch=getchar())!=‘\n’)的条件(相当于getchar()把换行符赋值给了ch,使得括号内条件为假),进而跳出while循环,所以该程序只能执行一次就结束了。
(4)在代码二中,在执行完display函数回到主函数后,加入了while (getchar() != ‘\n’) continue;这段代码。由上一点知道,display函数最后会在缓存中留下一个换行符。
while (getchar() != ‘\n’) continue;语句的意思是getchar()把字符从缓存区取出后,执行一段空语句。如果取出的字符不是换行符getchar()将一直读取,一直丢弃,直到清空缓存区。
而又因为getchar()本身并不能存储,若要比较某个位置的字符与特定字符的关系,则应及时赋值变量,储存响应。所以getchar()在读取到换行符之前的字符时,并没有存储这些字符(没有赋值给变量),而是都被丢弃掉了。
当读到display函数留下的换行符后,不满足while的循环条件(使得括号内条件为假),因此会跳出while循环。读取到的这个换行符因为没有赋值给其他变量进行保存,所以最终也会被丢弃掉。而换行符一般是缓存中最后一个字符,它被读取后,缓存中就没有其他字符了。这就是while (getchar() != ‘\n’) continue;起到清空行作用的原理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值