C++getchar()录入回车两次回车结束输入但是一次就结束

先上一段代码:

#include <iostream>
using namespace std;
int main()
{
	char c;
		while (c = getchar() != '\n')
		{
			cout << '!';
		}
		return 0;
}

运行程序:
在这里插入图片描述
我已经输入了很长一段字符,但是getchar()只会读入一个字符,但是按理说只有我们在回车两次的时候才会完成提交,那此时回车会出现什么情况呢?
在这里插入图片描述
每次while循环都会有一个!号输出,不对呀按照我们自己的逻辑应该是两次回车,解决这个问题之前我们再看一个经典的情况:
在这里插入图片描述
同样的代码我此时输入a字符,我需要再输入几个回车(‘\n’)可以结束输入?
在这段代码里面只需要1个回车就可以,仔细想想不对呀,我们的getchar不是可以录入’\n’的吗?确实可以录入比如这段代码:

char c, d;
	c = getchar();
	d = getchar();
	putchar(c);
	putchar(d);

我们输入a字符加一个回车结果就直接跳出程序,难道不应该第一个getchar()捕获a第二个getchar()捕获回车然后最后再有一个回车结束输入吗?怎么回事在这里插入图片描述
输出结果为:a加一个回车在这里插入图片描述
我们发现回车确实被捕获了但是并没有按照我们的简单理解思路走,也就是输入两个回车结束输入,是因为:
输入的本身就是’a’’\n’,两个getchar()函数就会读取位于缓冲区这两个字符,’\n’字符会让程序将所有读入的字符输入缓冲区,它是命令,但是它并不会被主动丢弃,实际上你输入ab然后回车,缓冲区会滞留一个’\n’字符,就和输入abcde然后回车一样原理,后者滞留的是’c’‘d’‘e’’\n’四个字符
如果我们输入回车加a呢?回车则正常录入
在这里插入图片描述
总结下来就是,如果我们现在有键入回车但是后面还有空余getchar()则程序认为还没有结束,getchar()读取缓冲区的字符不足,但是当键入回车后没有空余的getchar()键入回车(’\n’)一定会让程序结束,至于缓冲区剩余的内容就看你之前键入的多少了。
以上都是本人测试结果,对于c++内部原理理解还不够透彻,如有领悟再来修改。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值