Рассмотрим сценарий, в котором консольное приложение запрашивает серию входов, один за другим. Каждый вход проверяется перед переходом к следующему. Теперь, если ввод, сделанный пользователем, является недействительным, отображается сообщение об ошибке, и пользователя спрашивают, хочет ли он / она продолжить. Если пользователь выбирает нет, процесс ввода прерывается. Если пользователь выбирает «да», ему разрешается повторно вводить ввод, и процесс продолжается, запрашивая остаток от введенных данных.
Если бы я использовал метод read () для обработки ввода пользователя (который также проверяет ввод и спрашивает, хочет ли пользователь продолжить [y / n]), который возвращает false, если пользователь решает не продолжать, тогда я бы необходимо проверять результат каждого вызова read (), прежде чем переходить к следующему
Например:
bool valid = read("Name");
if (valid) valid = read("Age");
if (valid) valid = read("Sex");
if (valid) valid = read("DoB");
if(valid)
{
// do stuff
}
В качестве альтернативы, я могу заставить метод read () выдавать исключение, если пользователь решит прекратить, и в этом случае мой код станет:
try {
read("Name");
read("Age");
read("Sex");
read("DoB");
// do stuff
}catch(input_exception& e)
{}
Какой из этих подходов вы бы выбрали и почему? (Предположим, что метод read () правильно выдает исключение после очистки)
ПРИМЕЧАНИЕ: Я не ищу аргументов за и против исключений, которые в изобилии доступны в SO. Я только ищу ответ на конкретный вопрос.