c++中getline()读取缓冲区中回车,以及cin结束符的问题

C++中getline函数读取缓冲区中回车以及cin结束符的问题

运行代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	string str;
	int x;
	cin>>x;
	getchar();
	while(x--){
		getline(cin,str);
		cout<<str<<endl;
	} 
	return 0;
}

测试样例1

2

asd
asd
// 样例1先输入2, 回车, 输入asd,回车

测试样例2

2 haha
 haha
asd
asd
// 样例2先输入2 haha, 回车,输入asd,回车

运行过程分析:

首先cin结束符是空格, 制表符,回车。getline默认结束符是回车。
缓冲区是输入数据的一个内存区。
接下来就可以分析这两个测试例子了。
首先,对于测试样例1,
输入2,回车。 这个时候这两个字符都在缓冲区中, cin从2开始读,读到回车键
结束。注意,这里结束符依然在缓冲区。缓冲区已经有回车,getline此时不可以
接受输入,所以只需print语句,打印到终端。所以少了一次,后面接受输入asd\n。
正常输出。
样例2同理。
从中我们可以看到cin和getline的区别
getline的结束符,结束后,没有放到缓冲区中。
而cin的结束符,结束后,在缓冲区中。

解决方法

	在循环前加入getline(cin,str)。 为什么不加getchar(), 因为你不知道整数
	后面多少空格,换行符,如果整数后面还有很多空格,一个getchar()是不行的。
	从下面这个例子可以看到getchar没法解决多个空格,第二getline要想发挥作用
	,缓冲区中必须无结束符,否则就调到print语句。
2 dfhkf jkd jhfhk kjf
dfhkf jkd jhfhk kjf
fjk
fjk

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值