有什么好的理由:
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;
}