为什么 std::getline 调用 std::cin 不等待用户输入?
是否有任何充分的理由:
std::string input;
std::getline(std::cin, input);
getline 调用不会等待用户输入? cin的状态是不是有点混乱了?
Is there any good reason why:
std::string input;
std::getline(std::cin, input);
the getline call won't wait for user input? Is the state of cin messed up somehow?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您很可能在读取其他数据(例如
int
)后尝试读取字符串。考虑输入:
如果您使用以下代码:
getline
将仅读取 11 之后的换行符,因此您会得到它不等待用户输入的印象。解决此问题的方法是使用虚拟
getline
来消耗数字后面的新行。Most likely you are trying to read a string after reading some other data, say an
int
.consider the input:
if you use the following code:
the
getline
will only read the newline after 11 and hence you will get the impression that it's not waiting for user input.The way to resolve this is to use a dummy
getline
to consume the new line after the number.我已经测试了以下代码并且运行正常。
我猜想在你的程序中你的输入缓冲区中可能已经有一些东西了。
I have tested the following code and it worked ok.
I guess in your program that you might already have something in you input buffer.
此代码不起作用:
此确实起作用:
This code does not work:
This does work:
这发生在 std::getline(std::cin, input); 之前有换行符 (/n)。 getline 读取直到遇到 /n。因此,它将读取一个空字符串并返回 null,而不等待用户输入。
为了解决这个问题,我们使用虚拟 getline 或 cin.ignore(1, /n);
this occurred cause before std::getline(std::cin, input); there's newline char (/n). The getline reads until it encounters /n. Therefore it will read an empty string and return null without waiting for the users input.
To counter this we use an dummy getline, or cin.ignore(1, /n);