Menu
Coddy logo textTech

Das 'throw'-Schlüsselwort

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 50 von 56.

Manchmal müssen Sie signalisieren, dass ein Fehler in Ihrem eigenen Code aufgetreten ist, anstatt nur Ausnahmen abzufangen, die von anderen Funktionen ausgelöst wurden. Das Schlüsselwort throw ermöglicht es Ihnen, manuell eine Ausnahme auszulösen, wenn Ihr Programm ein Problem erkennt.

Sie können verschiedene Arten von Werten als Ausnahmen auslösen - Ganzzahlen, Zeichenfolgen oder sogar benutzerdefinierte Objekte. Hier ist die grundlegende Syntax:

if (someErrorCondition) {
    throw "Error message";  // Wirft ein String-Literal
}

Wenn Sie throw verwenden, stoppt das Programm sofort die Ausführung der aktuellen Funktion und sucht nach einem catch-Block, der den geworfenen Wert verarbeiten kann. Dies ist besonders nützlich für die Validierung von Eingaben oder zur Überprüfung von Bedingungen, die während der normalen Programmausführung nicht auftreten sollten.

Hier ist ein praktisches Beispiel für das Auslösen einer Exception beim Erkennen einer ungültigen Eingabe:

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

Das throw-Schlüsselwort gibt Ihnen die Kontrolle darüber, wann und wie Fehler in Ihren Programmen gemeldet werden, wodurch Ihre Funktionen robuster und vorhersehbarer werden, wenn sie mit ungültigen Bedingungen umgehen.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das eine Eingabevalidierung implementiert, indem es das Schlüsselwort throw verwendet, um manuell Ausnahmen auszulösen, wenn ungültige Bedingungen erkannt werden. Diese Herausforderung testet Ihr Verständnis dafür, wie Sie throw verwenden, um Fehler in Ihren eigenen Funktionen zu signalisieren.

Die folgenden Eingaben werden bereitgestellt:

  • Ein String username, der den gewählten Benutzernamen eines Benutzers darstellt
  • Ein Integer age, der das Alter des Benutzers darstellt

Ihr Programm sollte:

  1. Eine Funktion namens validateUser erstellen, die einen String und einen Integer als Parameter entgegennimmt
  2. Innerhalb der Funktion prüfen, ob der Benutzername leer ist (Länge 0 hat)
  3. Wenn der Benutzername leer ist, throw den String "Username cannot be empty"
  4. Prüfen, ob das Alter kleiner als 13 ist
  5. Wenn das Alter kleiner als 13 ist, throw den String "Age must be at least 13"
  6. Wenn beide Validierungen erfolgreich sind, geben Sie "User validation successful" aus
  7. In der Hauptfunktion rufen Sie validateUser mit den Eingabewerten auf
  8. Verwenden Sie einen try-Block, um die Funktion aufzurufen, und einen catch-Block, um alle geworfenen String-Ausnahmen zu behandeln

Verwenden Sie das folgende exakte Ausgabeformat:

Für eine erfolgreiche Validierung:

User validation successful

Für Validierungsfehler:

Validation error: [error_message]

Denken Sie daran, dass das Programm bei Verwendung von throw die Ausführung der aktuellen Funktion sofort stoppt und nach einem passenden catch-Block sucht. Der catch-Block sollte den Typ const char* angeben, um die geworfenen String-Literale zu behandeln. Wenn die erste Validierung fehlschlägt, wirft die Funktion eine Ausnahme und fährt nicht mit der Überprüfung der zweiten Bedingung fort.

Spickzettel

Das Schlüsselwort throw ermöglicht es Ihnen, Ausnahmen manuell auszulösen, wenn Ihr Programm ein Problem erkennt:

if (someErrorCondition) {
    throw "Error message";  // Wirft ein String-Literal
}

Wenn Sie throw verwenden, stoppt das Programm sofort die Ausführung der aktuellen Funktion und sucht nach einem catch-Block, der den geworfenen Wert verarbeiten kann.

Beispiel für das Auslösen einer Ausnahme zur Eingabevalidierung:

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

Sie können verschiedene Arten von Werten als Ausnahmen werfen – Ganzzahlen, Strings oder benutzerdefinierte Objekte. Verwenden Sie const char* in catch-Blöcken, um geworfene String-Literale zu verarbeiten.

Probier es selbst

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

int main() {
    // Eingabe lesen
    string username;
    int age;
    cin >> username;
    cin >> age;
    
    // TODO: Schreiben Sie Ihren Code hier
    // Erstellen Sie die Funktion validateUser und implementieren Sie die Validierungslogik
    // Verwenden Sie try-catch-Blöcke, um Ausnahmen zu behandeln
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf