7

有什么好的理由:

std::string input;
std::getline(std::cin, input);

getline 调用不会等待用户输入?cin的状态是否以某种方式搞砸了?

4

3 回答 3

6

您很可能在读取一些其他数据后尝试读取字符串,例如int.

考虑输入:

11
is a prime

如果您使用以下代码:

std::cin>>number;
std::getline(std::cin,input)

getline只会在 11 之后读取换行符,因此您会得到它没有等待用户输入的印象。

解决这个问题的方法是使用一个假人getline来消耗数字之后的新行。

于 2011-07-25T16:14:37.260 回答
2

我已经测试了以下代码,它工作正常。

#include <iostream>
using namespace std;
int main()
{
    string  input;
    getline(cin, input);
    cout << "You input is: " << input << endl;
    return 0;
}

我猜在您的程序中,您的输入缓冲区中可能已经有一些东西。

于 2011-07-25T16:22:28.813 回答
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;
}
于 2019-08-31T16:53:21.630 回答