Блоки 'try' и 'catch'
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 49 из 56.
Блоки try и catch работают вместе, создавая защитную сеть для вашего кода. Вы помещаете потенциально рискованный код внутрь блока try, и если возникает исключение, программа переходит к соответствующему блоку catch, чтобы корректно обработать ошибку.
Вот базовая структура синтаксиса:
try {
// Код, который может вызвать исключение
} catch (exception_type e) {
// Код для обработки исключения
}Практический пример включает преобразование строк в числа с использованием std::stoi, который может выбросить исключение std::invalid_argument, если строка содержит нечисловые символы:
try {
std::string input = "abc";
int number = std::stoi(input); // Это вызовет исключение
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Когда исключение возникает в блоке try, программа немедленно прекращает выполнение оставшегося кода в этом блоке и переходит к блоку catch. Это предотвращает аварийное завершение вашей программы и позволяет вам предоставить пользователям содержательную обратную связь, когда что-то идет не так.
Задание
ЛегкоСоздайте программу, которая демонстрирует безопасное преобразование строки в число с использованием блоков try и catch. Эта задача проверит ваше понимание того, как обрабатывать исключения, возникающие при преобразовании пользовательского ввода из строк в целые числа.
Будут предоставлены следующие входные данные:
- Строка
userInput, которая может представлять или не представлять собой допустимое целое число
Ваша программа должна:
- Поместить преобразование строки в целое число внутрь блока
try, используяstd::stoi - Если преобразование прошло успешно, вывести преобразованное число с сообщением об успехе
- Использовать блок
catchдля обработки исключенийstd::invalid_argument, которые возникают, когда строка содержит нечисловые символы - В блоке catch вывести сообщение об ошибке, указывающее на то, что ввод был неверным
Используйте следующий точный формат вывода:
Для успешного преобразования:
Valid number: [converted_number]Для неверного ввода, вызывающего исключение:
Error: Invalid inputПомните, что std::stoi выбросит исключение std::invalid_argument, когда встретит строку, которую невозможно преобразовать в целое число. Блок try должен содержать попытку преобразования, а блок catch должен указывать тип исключения как std::invalid_argument& для обработки этой конкретной ошибки. При возникновении исключения программа немедленно перейдет из блока try в соответствующий блок catch, что предотвратит аварийное завершение программы.
Шпаргалка
Используйте блоки try и catch для безопасной обработки исключений:
try {
// Код, который может вызвать исключение
} catch (exception_type e) {
// Код для обработки исключения
}Пример с преобразованием строки в целое число std::stoi:
try {
std::string input = "abc";
int number = std::stoi(input); // Это вызовет исключение
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Когда в блоке try возникает исключение, программа немедленно переходит к соответствующему блоку catch, что предотвращает сбои и позволяет корректно обрабатывать ошибки.
Попробуйте сами
#include <iostream>
#include <string>
using namespace std;
int main() {
// Чтение входных данных
string userInput;
cin >> userInput;
// TODO: Напишите ваш код ниже
// Используйте блоки try-catch с std::stoi для преобразования строки
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров8Основы обработки ошибок
Введение в исключенияБлоки 'try' и 'catch'Ключевое слово 'throw'Различные типы исключенийУниверсальный обработчикИтоги: Безопасное деление