使用 `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')

在 getline 之后在 C++ 中输入

在线编程的简单输入输出

离散化

“cin”怎么会弄乱一个循环?

在 getline(cin, string) 之后使用 cin