Сообщение не всегда появляется при ошибке ввода - PullRequest
0 голосов
/ 20 марта 2020

Почему сообщение «Ошибка: необходимо ввести 1 или 0» появляется только каждые 2 раза и не всегда?

int instruction() {
    string instruction;
    cout << "Do you want to see the tutorial of the game? If yes press: 1, else press: 0" << endl << "--> ";
    while (getline(cin,instruction)){
        if (instruction == "1" ||  instruction == "0") {
            break;
        }else{
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(),'\n');
                cout << "Error: Must introduce 1 or 0" << endl << "--> ";
            }
    }

Вывод отладки:

Do you want to see the tutorial of the game? If yes press: 1, else press: 0
--> asdasd
asdasdasd
Error: Must introduce 1 or 0
--> sdfasdfasdf
asdf
Error: Must introduce 1 or 0
--> sad
fasd
Error: Must introduce 1 or 0
--> fas
df
Error: Must introduce 1 or 0
--> asd
fas

Спасибо.

1 Ответ

2 голосов
/ 20 марта 2020

Первая строка, которую вы вводите, съедается getline(cin,instruction), поэтому cin.ignore(numeric_limits<streamsize>::max(),'\n'); ждет, пока вы введете вторую строку, и съест ее. Просто удалите cin.clear() и cin.ignore(numeric_limits<streamsize>::max(),'\n');, поскольку вызов getline уже использует неверный ввод.

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