Как я могу проверить, является ли ввод пользователя действительным, а также номер, который я ищу? - PullRequest
0 голосов
/ 16 сентября 2018

Как я могу создать условный оператор, который предотвращает вход в состояние сбоя и запрашивает у пользователя новые данные, если данные недействительны или данные не 1, 2, 3 ИЛИ 4?

int choice;

while ( !choice || choice != 1 || 2 || 3 || 4){
     cout << "Entry Invalid. Enter again: ";
     cin >> choice
}

Например, если пользователь вводит «f», то состояние сбоя будет учтено, и программа запросит новые данные. И когда они введут 5, программа скажет «Недействительный номер» и запросит новые данные.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Именно эта проблема доставила мне слишком много хлопот в первый год.Это должно делать то, что вы хотите, возможно, попробуйте реализовать максимальное количество неудачных попыток.

int choice = 0;
while (true) {
    cout << "Please enter a number between 1 and 4" << endl;
    cin >> choice;
    if (cin.fail()) {
        cout << "Invalid input" << endl;
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else if (choice < 1 || choice > 4) {
        cout << "Not a valid number" << endl;
    }
    else {
        break;
    }
}
cout << "You chose " << choice << endl;
0 голосов
/ 16 сентября 2018

Для stoi вам нужен стандарт C ++ 11

int choice;
string inp;

cin >> inp;

while(inp != "1" && inp != "2" && inp !="3" && inp !="4"){

    cout << "Wrong input , type again" << endl;
    //system("PAUSE");
    cin >> inp;

}
choice = stoi(inp);
cout << choice;
...