Menu
Coddy logo textTech

Ключевое слово 'throw'

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 50 из 56.

Иногда нужно сообщить, что в вашем собственном коде произошла ошибка, а не просто перехватить исключения, выброшенные другими функциями. Ключевое слово throw позволяет вручную вызвать исключение, когда ваша программа обнаруживает проблему.

Ты можешь выбрасывать разные типы значений как exceptions — целые числа, строки или даже пользовательские объекты. Вот базовый синтаксис:

if (someErrorCondition) {
    throw "Error message";  // Выбрасывает строковый литерал
}

Когда вы используете throw, программа немедленно прекращает выполнение текущей function и ищет блок catch, который может обработать выброшенное значение. Это особенно полезно для проверки input или условий, которые не должны возникать при нормальном выполнении программы.

Вот практический пример выбрасывания исключения при обнаружении недопустимого ввода:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

Ключевое слово throw позволяет контролировать, когда и как сообщается об ошибках в ваших программах, делая ваши функции более надёжными и предсказуемыми при работе с недопустимыми условиями.

challenge icon

Задание

Легко

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

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

  • string username, представляющая выбранное пользователем имя (эта строка может быть пустой)
  • целое число age, представляющее возраст пользователя

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

  1. Создать function с именем validateUser, которая принимает string и целое число в качестве параметров
  2. Внутри function проверить, пусто ли имя пользователя (имеет длину 0)
  3. Если имя пользователя пустое, использовать throw со string "Username cannot be empty"
  4. Проверить, меньше ли возраст 13
  5. Если возраст меньше 13, использовать throw со string "Age must be at least 13"
  6. Если обе проверки пройдены, вывести "User validation successful"
  7. В main function вызвать validateUser с входными значениями
  8. Использовать блок try для вызова function и блок catch для обработки любых выброшенных исключений типа string

Используйте следующий точный формат вывода:

При успешной проверке:

User validation successful

При ошибках проверки:

Validation error: [error_message]

Помните, что при использовании throw программа немедленно прекращает выполнение текущей function и ищет подходящий блок catch. Блок catch должен указывать тип const char* для обработки выброшенных строковых литералов. Если первая проверка завершается неудачно, function выбросит исключение и не продолжит проверять второе условие.

Попробуйте сами

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Прочитать ввод
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: Напишите свой код здесь
    // Создайте функцию validateUser и реализуйте логику проверки
    // Используйте блоки try-catch для обработки исключений
    
    return 0;
}
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор C++