Как перейти от исключений к сообщениям об ошибках пользователяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как перейти от исключений к сообщениям об ошибках пользователя

Сообщение Anonymous »

Когда мы учимся в школе, проверка пользовательских данных чаще всего явно игнорируется. Я научился проверять данные с помощью механизма исключений, но когда я пытаюсь распечатать полезные пользовательские сообщения, делать это из исключений кажется очень неуклюжим. Чем больше я пробую, тем больше мне кажется, что исключения предназначены для «внутри кода», и они не должны «ускользнуть» от конечного пользователя.
Давайте рассмотрим простой пример. Пользователю необходимо ввести команду. Формат может быть следующим: cmd i j или cmd, где cmd — предопределенный набор команд и номера i и j. Затем мы выполняем эту команду.
Что у меня есть, снизу вверх:

Код: Выделить всё

// utility function, converts string to enum
str_to_enum(string str, map s) -> enum
// may throw std::invalid_argument{"cannot convert " + str + " to enum"}

parse_line(string line)
tokens = split(line)

Cmd cmd = tokens[0]; // calls str_to_enum, lets the exception pass by

if (tokens.empty())
throw std::invalid_argument{"empty string as command"s};

if (...)
throw std::invalid_argument{cmd.spelling() + " does not take any argument."};

if (...)
throw std::invalid_argument{cmd.spelling() + " takes exactly 2 arguments."};

str_to_int(tokens[1])
str_to_int(tokens[2]) // throws std::out_of_range

main_loop() {
get_line(line);

try {
Full_cmd full_cmd = line; // calls parse_line, may throw

if (...)
throw std::invalid_argument{"Coordinates out of range"};

try {
execute_cmd(full_cmd); // may throw
}
catch (std::exception& e) {
cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/39840119/how-to-get-from-exceptions-to-user-error-messages[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»