【发布时间】:2017-12-21 07:34:43
【问题描述】:
对于以下代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
string s;
getline(cin,s);
cout << s << "\n";
cin.ignore(1000,'\n');
}
return 0;
}
示例输入:
2
姓名1
名字2
预期输出:
姓名1
名字2
错误输出:
Name2 // 后跟空行
我不知道为什么会这样。我尝试了 stackoverflow 上给出的所有解决方案,但不幸的是没有一个对我有用。在此先感谢。
【问题讨论】:
-
删除对
ignore的调用。它正在吃下一行。如果您不明白原因,请阅读规范std::basic_istream::ignore。 -
删除
ignore也不会产生预期的输出。 -
离题:小心
#include<bits/stdc++.h>它不会为您节省很多工作,它是非标准的(因此它只适用于单个编译器)并且与using namespace std;结合使用会使您面临一些不必要的风险。 -
第二个问题是
cin >> t;在输入时不使用代表您按回车的新行。此换行符被第一个getline占用并产生一个空字符串。