Я пытаюсь проверить вход для вопроса quit/return в своей программе, поэтому пользователь вынужден ввести либо 'r'
, либо 'q'
.Проверка ввода переменной char
Мне удалось заставить его почти работать. Проблема в том, что пользователь вводит 'r'
или 'q'
в начале, за которым следуют случайные буквы, тогда программа принимает этот ввод. Любые идеи о том, как получить программу, чтобы разрешить только один 'r'
или 'q'
?
void exit()
{
char choice;
bool badInput;
do
{
cout << "Press 'r' to return to the menu\nPress 'q' to quit the program\n\n" << endl;
cin >> choice;
badInput = cin.fail();
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} while (badInput == true && choice == 'r' && choice == 'q' && (cin.peek() == EOF));
if (choice == 'q')
{
system("CLS");
cout << "Bye!\n";
system("PAUSE");
}
else if (choice == 'r')
{
system("CLS");
main();
}
else
{
exit();
}
}
Использовать 'std :: getl ine() ', чтобы прочитать всю строку ввода. Вот для чего это. –
Тестирование против'true', как правило, бессмысленно, вот что логическое условие внутри' if' уже делает. 'while (badInput && ...' должно быть достаточно. – tadman
Вместо того, чтобы явно требовать, чтобы они вводили только 'r' или' q', было бы проще взять первую букву того, что они ввели, а затем игнорировать все после нее. , 'do ... while (choice == 'r')' цикл, скорее всего, лучше подходит для вашей цели, чем вызов 'main()' снова или определение функции с именем 'exit()' в глобальном пространстве имен. \ [Примечание что стандарт C++ говорит [вам не разрешено вызывать 'main()' из самой программы) (http://eel.is/c++draft/basic.start.main#3), в отличие от некоторых других Языки. \] –