C ++ cin.ignore () пропустить цикл - PullRequest
0 голосов
/ 04 февраля 2020

Я создал для l oop в моей программе, поэтому вам нужно нажать Enter, чтобы продолжить. Я сделал это, используя cin.ignore (). Это базовая c идея кода, который я использую.

for (int i = 0; i < 5; i++) {  // loop will do it for each player data
    cout << "Press Enter to Continue ";
    cin.ignore();
    system("cls");
    cout << "Playes Data" << endl;
}

Этот код работает нормально, пока игрок не решит ввести что-то, а не просто нажать ввод. Из того, что я понимаю, потому что игрок что-то ввел, это значит, что будет буфер. Вы можете избавиться от буфера, просто используя cin.ignore. Это позволяет пропустить итерацию, и игроку не нужно нажимать Enter, чтобы продолжить. Я только что включил второй cin.ignore, но я не хочу, чтобы они дважды нажимали Enter. Есть ли способ использовать второй cin.ignore, только если есть буфер, или есть какой-то другой способ справиться с этим?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2020

Всегда есть буфер. Вызов std::cin.ignore() сам по себе, без значений параметров, просто пропускает следующий символ в буфере, который может быть или не быть символом '\n' из нажатия ENTER .

Для пропустить все в буфере, до следующего ENTER нажмите, используйте std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n').

1 голос
/ 04 февраля 2020

Вы можете заменить

cin.ignore();

на

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Где второй вариант будет игнорировать все символы, включая символ новой строки, который вводит клавиша ввода в поток.

...