版权声明:本文为博主原创文章,未经博主允许不得转载。 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