有什么充分的理由吗:
std::string input;
std::getline(std::cin, input);
getline 调用不会等待用户输入? cin的状态是不是有点混乱了?
您很可能在读取其他数据后尝试读取字符串,例如
int
。
考虑输入:
11
is a prime
如果您使用以下代码:
std::cin>>number;
std::getline(std::cin,input)
getline
只会读取 11 之后的换行符,因此您会得到它不等待用户输入的印象。
解决这个问题的方法是使用一个虚拟的
getline
来消耗数字后面的新行。
我已经测试了以下代码,它工作正常。
#include <iostream>
using namespace std;
int main()
{
string input;
getline(cin, input);
cout << "You input is: " << input << endl;
return 0;
}
我猜在你的程序中你的输入缓冲区中可能已经有一些东西了。
此代码不起作用:
#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;
}
这发生在 std::getline(std::cin, input); 之前有换行符 (/n)。 getline 读取直到遇到 /n。因此,它会读取一个空字符串并返回 null,而不等待用户输入。
为了解决这个问题,我们使用虚拟 getline,或 cin.ignore(1, /n);