Чтение из входного буфера - PullRequest
0 голосов
/ 29 мая 2018
void dr1() {
    int num1 = 0, num2 = 0;
    char str[100];  

    while (str[0] != '|') {
        cout << "Please enter two numbers (enter \"|\" to terminate): ";

        cin >> num1;
        cin >> num2;
        cin.getline(str, 100);

        cout << num1 << num2 << endl;
    }
}

Если пользователь вводит строку, не должна ли переменная str прочитать ее из буфера ввода?

Из того, что я узнал, нельзя вводить строковые символы в int введите и, следовательно, они остаются в буфере.Если они оставлены в буфере, не должен ли getline() прочитать какой-либо ввод в буфере?

1 Ответ

0 голосов
/ 30 мая 2018

Если operator>> не удается прочитать отформатированное значение, входные данные действительно остаются в буфере И ТАКЖЕ поток переводится в состояние ошибки, таким образом, последующие чтения игнорируются и также завершаются неудачно.Вот почему getline() не читает ввод "|", как ожидалось.Вам нужно clear() состояние ошибки потока после сбоя форматированной операции чтения.Например:

void dr1()
{
    int num1, num2;
    char str[100];
    do
    {
        cout << "Please enter two numbers (enter \"|\" to terminate): " << flush;
        if (cin >> num1)
        {
            if (cin >> num2)
            {
                // use numbers as needed...
                cout << num1 << num2 << endl;
                continue;
            }
        }
        cin.clear();
        if (!cin.getline(str, 100)) break;
        if (str[0] == '|') break;
    }
    while (true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...