是否有充分的理由:
std::string input; std::getline(std::cin, input);
getline调用不会等待用户输入?cin的状态是否以某种方式混乱了?
nnvyjq4y1#
最有可能的是,您在阅读其他数据(例如int)之后尝试读取字符串。考虑输入:
int
11 is a prime
如果您使用以下代码:
std::cin>>number; std::getline(std::cin,input)
getline将只读取11之后的换行符,因此你会得到这样的印象:它没有等待用户输入。解决这个问题的方法是使用一个伪getline来消耗数字后面的新行。
getline
e7arh2l62#
我测试了下面的代码,它工作正常。
#include <iostream> using namespace std; int main() { string input; getline(cin, input); cout << "You input is: " << input << endl; return 0; }
我猜在你的程序中,你可能已经有一些东西在你的输入缓冲区。
5f0d552i3#
此代码不起作用:
#include <iostream> #include <string> int main() { int nr; std::cout << "Number: "; std::cin >> nr; std::string input; std::cout << "Write something: "; getline(std::cin, input); std::cout << "You input is: " << input << std::endl; return 0; }
现在它工作了:
#include <iostream> #include <string> int main() { int nr; std::cout << "Number: "; std::cin >> nr; std::string x; std::getline(std::cin,x); std::string input; std::cout << "Write something: "; getline(std::cin, input); std::cout << "You input is: " << input << std::endl; return 0; }
3条答案
按热度按时间nnvyjq4y1#
最有可能的是,您在阅读其他数据(例如
int
)之后尝试读取字符串。考虑输入:
如果您使用以下代码:
getline
将只读取11之后的换行符,因此你会得到这样的印象:它没有等待用户输入。解决这个问题的方法是使用一个伪
getline
来消耗数字后面的新行。e7arh2l62#
我测试了下面的代码,它工作正常。
我猜在你的程序中,你可能已经有一些东西在你的输入缓冲区。
5f0d552i3#
此代码不起作用:
现在它工作了: