cin和geline(cin, str)一起使用容易被忽略的一个坑(异常)和解决方法

本文探讨了C++中使用cin与getline混合输入字符串时遇到的问题,即输入的换行符导致循环体跳过,影响字符串读取。通过添加cin.ignore()语句解决了这一问题,确保了正确读取所有输入的字符串。
int main()
{
	int n;
	while (cin >> n) {
		string res;
		for (int i = 0; i < n; i++) {
			string tmp;
			getline(cin, tmp);
			res = res + tmp;
		}
		cout << res << endl;
	}
	system("pause");
	return 0;
}

这段代码我们是想要输入n个字符串并将他合并

我们看看结果,输入n表示要输入string的个数,可是它似乎根本不给我输入最后一个string的机会

起初我以为是我的编译器坏了,怎么循环次数不够,后来我调试的过程中发现编译器直接跳过了i=0的循环体

这是为什么呢?

原来在cin的过程中我们输入了一个'\n'导致i=0的循环直接被跳过

这里只要添加一行语句cin.igore();就可以解决问题了

int main()
{
	int n;
	while (cin >> n) {
		string res;
		cin.ignore();//就是这里
		for (int i = 0; i < n; i++) {
			string tmp;
			getline(cin, tmp);
			res = res + tmp;
		}
		cout << res << endl;
	}
	system("pause");
	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值