Я думаю, что вы пытаетесь сделать слишком много здесь. Вы можете упростить это.
Нет необходимости создавать и ловить исключения внутри checkinput
. Поскольку есть только два случая, вы можете использовать логическое значение. Во-вторых, вы возвращаетесь с. Я не знаю, почему вы это делаете, это не используется. Вместо этого вы должны вернуть логическое значение.
checkinput
становится:
bool checkInput(string c) {
if (c.length() > 1)
return false;
return c == "Y" || c == "y" || c == "N" || c == "n";
}
Теперь вы можете упростить do-while и удалить оператор try. Кроме того, теперь нет необходимости в переменной test
, поскольку мы успешно получаем любой ввод:
int main() {
string choice = "";
do {
cout << "Enter yes or no (y/n): ";
getline(cin, choice); // or cin >> choice;
bool check = checkInput(choice);
if (!check)
cout << "Error: Input must be y or n." << endl;
} while (true);
}
Вы также можете упростить это, но это будет стоить читабельности. Удачи!