std :: getline на std :: cin - PullRequest
5 голосов
/ 25 июля 2011

Есть ли веская причина, почему:

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

вызов getline не будет ждать ввода пользователя?Состояние cin испортилось как-то?

Ответы [ 2 ]

5 голосов
/ 25 июля 2011

Скорее всего, вы пытаетесь прочитать строку после прочтения некоторых других данных, например, int.

рассмотрим ввод:

11
is a prime

, если вы используете следующий код:

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

getline будет читать символ новой строки только после 11, и, следовательно, у вас будет впечатление, что он не ждет ввода пользователя.

Способ решить эту проблему - использовать пустышку getline, чтобы использовать новую строку после числа.

2 голосов
/ 25 июля 2011

Я проверил следующий код, и он работал нормально.

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

Я полагаю, что в вашей программе у вас уже есть что-то в буфере ввода.

...