使用 `cin >> n;` 后使用 `getline(cin, s);`
Posted
技术标签:
【中文标题】使用 `cin >> n;` 后使用 `getline(cin, s);`【英文标题】:Using `getline(cin, s);` after using `cin >> n;` 【发布时间】:2009-07-26 07:27:46 【问题描述】:int n;
std::cin >> n;
std::string s = "";
std::getline(cin, s);
我注意到如果我使用cin
,我的程序将在下次到达getline(cin, rangeInput)
时挂起。
由于getline()
使用cin
,如果我之前使用cin
,这是否会导致程序挂起?使用cin
后想得到线路怎么办?
【问题讨论】:
输入 1 2 3 对我有用。什么输入对你来说失败了? 尝试输入一位数字并按回车键(获取 someNum)。无论如何,我正在阅读威廉发布的链接。还是谢谢 【参考方案1】:您需要清除输入流 - 尝试在您的 cin 之后添加以下内容:
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
this 问题的公认答案很好地解释了为什么/何时需要这样做。
【讨论】:
【参考方案2】:std::cin
在输入流中留下无关的\n
。当您使用std::getline()
时,您正在检索\n
。
虽然如果您真的需要std::cin
,@WilliamLannen 的答案有效,但您最好使用此方法:
int n;
std::string sn;
std::stringstream ssn;
std::getline(std::cin, sn);
ssn << sn;
ssn >> n;
参考文献
http://www.daniweb.com/software-development/cpp/tutorials/71858
【讨论】:
【参考方案3】:int n;
std::cin >> n;
std::cin.get() //<--- use cin.get() here ...
std::string s = "";
std::getline(cin, s);
【讨论】:
欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性。以上是关于使用 `cin >> n;` 后使用 `getline(cin, s);`的主要内容,如果未能解决你的问题,请参考以下文章
使用 cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n')