C++的getline注意点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38169413/article/details/88380792

背景

有一次做编程题的时候,输入有三个变量,分别是int的m,n,还有string的s,
然后我是这么写的

int m,n;
string s;
cin >> m >> n;
getline(cin,s);
cout << m << n <<endl <<s <<endl;

原本以为是对的,结果出问题了,比如

3 3
3 3

原因

结果只有3 3,没有输入的字符串,后来一查cin的用法,才知道cin输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给m和n,但是换行符仍然滞留在输入流了,如果在std::cin>>w 后面有着getline语句,这个换行符就被这个getline读取了,发现getline结果为空。

正确的解法是在getline()之前加上cin.ignore()来舍弃输入流中不需要的字符,修改如下

int m,n;
string s;
cin >> m >> n;
cin.ignore();
getline(cin,s);
cout << m << n <<endl <<s <<endl;

结果为

3 3
elvan
3 3
elvan

猜你喜欢

转载自blog.csdn.net/weixin_38169413/article/details/88380792