Menu
Coddy logo textTech

Блоки '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. Это предотвращает аварийное завершение вашей программы и позволяет вам предоставить пользователям содержательную обратную связь, когда что-то идет не так.

challenge icon

Задание

Легко

Создайте программу, которая демонстрирует безопасное преобразование строки в число с использованием блоков try и catch. Эта задача проверит ваше понимание того, как обрабатывать исключения, возникающие при преобразовании пользовательского ввода из строк в целые числа.

Будут предоставлены следующие входные данные:

  • Строка userInput, которая может представлять или не представлять собой допустимое целое число

Ваша программа должна:

  1. Поместить преобразование строки в целое число внутрь блока try, используя std::stoi
  2. Если преобразование прошло успешно, вывести преобразованное число с сообщением об успехе
  3. Использовать блок catch для обработки исключений std::invalid_argument, которые возникают, когда строка содержит нечисловые символы
  4. В блоке 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;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком