Menu
Coddy logo textTech

Słowo kluczowe „throw”

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

Czasami trzeba 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 zgłosić wyjątek, gdy program wykryje problem.

Możesz zgłaszać jako wyjątki różne typy wartości — liczby całkowite, ciągi znaków, a nawet własne obiekty. 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ć rzuconą wartość. Jest to szczególnie przydatne do walidowania danych wejściowych lub sprawdzania warunków, które nie powinny występować 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;
}

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 po wykryciu 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:

  • Ciąg znaków username reprezentujący wybraną przez użytkownika nazwę (ten wiersz może być pusty)
  • Liczba całkowita age reprezentująca wiek użytkownika

Twój program powinien:

  1. Utworzyć funkcję o nazwie validateUser, która przyjmuje jako parametry ciąg 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ć ciąg 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ć ciąg znaków "Age must be at least 13"
  6. Jeśli obie walidacje zakończą się powodzeniem, 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 i bloku catch do obsługi wszelkich zgłoszonych wyjątków typu ciąg 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żywasz 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 ciągów znaków. 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;

int main() {
    // Wczytaj dane wejściowe
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: Napisz tutaj swój kod
    // Utwórz funkcję validateUser i zaimplementuj logikę walidacji
    // Użyj bloków try-catch do obsługi wyjątków
    
    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