有没有什么好的理由:
std::string input;
std::getline(std::cin, input);
getline调用不会等待用户输入吗?cin的状态是否有问题?
有没有什么好的理由:
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
函数来消耗数字后面的换行符。std::getline
来读取任何输入,而不是使用std::cin >>
风格的输入。如果要读取一个整数,您可以将该行读入字符串缓冲区,然后解析该缓冲区以获取整数(例如使用std::stringstream
)。 - Sander De Dyckercin.ignore(1, '\n')
。 - Svengetline
之前调用了 operator>>
,导致输入缓冲区中留下了一个 '\n'。 - Benjamin Lindley#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;
}
'\n'
吗? - hammarcin
允许进行缓冲。许多实现需要一个 换行符 来清空输入缓存并将数据返回给调用程序。 - Thomas Matthews