Зачем нужен второй cin.ignore ()? - PullRequest
5 голосов
/ 10 марта 2009

Я заметил, что всякий раз, когда я пишу программу, которая использует std::cin, если я хочу, чтобы пользователь нажал Enter, чтобы завершить программу, мне нужно дважды написать std::cin.ignore(), чтобы получить желаемое поведение. Например:

#include <iostream>

int main(void)
{
    int val = 0;
    std::cout << "Enter an integer: ";
    std::cin >> val;

    std::cout << "Please press Enter to continue..." << std::endl;

    std::cin.ignore();
    std::cin.ignore();  // Why is this one needed?
}

Я также заметил, что когда я не использую cin для фактического ввода, а просто для вызова ignore() в конце, мне нужен только один.

Ответы [ 2 ]

8 голосов
/ 10 марта 2009

Discl: я упрощаю то, что действительно происходит.

Первый служит для очистки того, что оператор извлечения (>>) не использовал. Второй ждет другого \ n.

Точно так же, когда мы выполняем std :: getline после извлечения: перед вызовом std :: getline ()

требуется the_stream::ignore(std::numeric_limits<streamsize>::max(), '\n');
0 голосов
/ 10 марта 2009

Странно. На какой платформе вы работаете? По определению, ignore извлекает и отбрасывает n символов из входного потока или, если он достигает EOF, останавливается. Если вы не укажете никаких параметров, он извлечет 1 символ. В Windows конец строки включает в себя как \r, так и \n - всего два символа (возврат каретки с новой строкой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...