Menu
CoddyTech

Słowo kluczowe „throw”

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 50 z 56.

Czasami musisz zasygnalizować, że w Twoim własnym kodzie wystąpił błąd, zamiast tylko przechwytywać wyjątki zgłaszane przez inne funkcje. Słowo kluczowe throw pozwala ręcznie wywołać wyjątek, gdy program wykryje problem.

Możesz rzucać różnymi typami wartości jako wyjątkami — liczbami całkowitymi, ciągami znaków, a nawet własnymi obiektami. Oto podstawowa składnia:

if (someErrorCondition) {
    throw "Error message";  // Rzuca literał łańcuchowy
}

Gdy używasz throw, program natychmiast przestaje wykonywać bieżącą funkcję i szuka bloku catch, który może obsłużyć wyrzuconą wartość. Jest to szczególnie przydatne do sprawdzania poprawności danych wejściowych lub warunków, które nie powinny wystąpić podczas normalnego wykonywania programu.

Oto praktyczny przykład zgłaszania wyjątku po wykryciu nieprawidłowych danych wejściowych:

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

Wywołujący umieszcza wywołanie w bloku try. Rzucony literał łańcuchowy ma typ const char*, więc taki typ podaje się w bloku catch, a jego parametr przechowuje komunikat:

try {
    checkAge(-5);
} catch (const char* message) {
    std::cout << "Error: " << message << std::endl;
}
// Wynik: Error: Age cannot be negative!

Słowo kluczowe throw daje ci kontrolę nad tym, kiedy i w jaki sposób błędy są zgłaszane w twoich programach, dzięki czemu twoje funkcje są bardziej odporne i przewidywalne podczas obsługi nieprawidłowych warunków.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który implementuje walidację danych wejściowych za pomocą słowa kluczowego throw, aby ręcznie zgłaszać wyjątki w przypadku wykrycia nieprawidłowych warunków. To wyzwanie sprawdzi, czy rozumiesz, jak używać throw do sygnalizowania błędów we własnych funkcjach.

Podane zostaną następujące dane wejściowe:

  • Łańcuch znaków username reprezentujący nazwę użytkownika wybraną przez użytkownika (ta linia może być pusta)
  • Liczba całkowita age reprezentująca wiek użytkownika

Twój program powinien:

  1. Utworzyć funkcję o nazwie validateUser, która przyjmuje jako parametry łańcuch znaków i liczbę całkowitą
  2. Wewnątrz funkcji sprawdzić, czy nazwa użytkownika jest pusta (ma długość 0)
  3. Jeśli nazwa użytkownika jest pusta, użyć throw, aby zgłosić łańcuch znaków "Username cannot be empty"
  4. Sprawdzić, czy wiek jest mniejszy niż 13
  5. Jeśli wiek jest mniejszy niż 13, użyć throw, aby zgłosić łańcuch znaków "Age must be at least 13"
  6. Jeśli obie walidacje przejdą pomyślnie, wypisać "User validation successful"
  7. W funkcji głównej wywołać validateUser z wartościami wejściowymi
  8. Użyć bloku try do wywołania funkcji oraz bloku catch do obsługi wszelkich wyjątków będących zgłoszonymi łańcuchami znaków

Użyj następującego dokładnego formatu wyjściowego:

W przypadku pomyślnej walidacji:

User validation successful

W przypadku błędów walidacji:

Validation error: [error_message]

Pamiętaj, że gdy użyjesz throw, program natychmiast przestaje wykonywać bieżącą funkcję i szuka pasującego bloku catch. Blok catch powinien określać typ const char*, aby obsługiwać zgłoszone literały łańcuchowe. Jeśli pierwsza walidacja się nie powiedzie, funkcja zgłosi wyjątek i nie będzie kontynuować sprawdzania drugiego warunku.

Spróbuj swoich sił

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

// TODO: Napisz tutaj funkcję validateUser, nad main
// Przyjmuje string username i int age oraz zgłasza literał tekstowy, gdy warunek sprawdzania nie jest spełniony

int main() {
    // Wczytaj dane wejściowe
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: Wywołaj validateUser wewnątrz bloku try
    // i przechwyć zgłoszony komunikat za pomocą catch (const char* error)
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator C++ online