Das 'throw'-Schlüsselwort
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy. Lektion 50 von 56.
Manchmal musst du signalisieren, dass in deinem eigenen Code ein error aufgetreten ist, anstatt nur von anderen Funktionen ausgelöste exceptions abzufangen. Das Schlüsselwort throw ermöglicht es dir, manuell eine Ausnahme auszulösen, wenn dein Programm ein Problem erkennt.
Du kannst verschiedene Arten von Werten als exceptions auslösen – Ganzzahlen, Zeichenketten oder sogar benutzerdefinierte Objekte. Hier ist die grundlegende Syntax:
if (someErrorCondition) {
throw "Error message"; // Wirft ein String-Literal
}Wenn du throw verwendest, beendet 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, um input zu validieren oder Bedingungen zu überprüfen, die während der normalen Programmausführung nicht auftreten sollten.
Hier ist ein praktisches Beispiel dafür, wie beim Erkennen ungültiger Eingaben eine Ausnahme ausgelöst wird:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Das Schlüsselwort throw gibt dir Kontrolle darüber, wann und wie Fehler in deinen Programmen gemeldet werden, und macht deine Funktionen robuster und vorhersehbarer im Umgang mit ungültigen Bedingungen.
Aufgabe
EinfachErstelle ein Programm, das die Eingabevalidierung mithilfe des Schlüsselworts throw implementiert, um manuell Ausnahmen auszulösen, wenn ungültige Bedingungen erkannt werden. Diese Herausforderung testet dein Verständnis dafür, wie du throw verwendest, um in deinen eigenen Funktionen Fehler zu signalisieren.
Die folgenden Eingaben werden bereitgestellt:
- Ein string
username, der den vom Benutzer gewählten Benutzernamen darstellt (diese Zeile kann leer sein) - Eine Ganzzahl
age, die das Alter des Benutzers darstellt
Dein Programm sollte:
- Eine Funktion namens
validateUsererstellen, die einen string und eine Ganzzahl als Parameter entgegennimmt - Innerhalb der Funktion prüfen, ob der username leer ist (die length beträgt 0)
- Wenn der username leer ist, den string
"Username cannot be empty"mitthrowauslösen - Prüfen, ob das age kleiner als 13 ist
- Wenn das age kleiner als 13 ist, den string
"Age must be at least 13"mitthrowauslösen - Wenn beide Validierungen erfolgreich sind,
"User validation successful"ausgeben - In der main-Funktion
validateUsermit den Eingabewerten aufrufen - Einen
try-Block verwenden, um die Funktion aufzurufen, und einencatch-Block, um alle ausgelösten string exceptions zu behandeln
Verwende das folgende exakte Ausgabeformat:
Bei erfolgreicher Validierung:
User validation successfulBei Validierungsfehlern:
Validation error: [error_message]Denke daran: Wenn du throw verwendest, beendet das Programm sofort die Ausführung der aktuellen Funktion und sucht nach einem passenden catch-Block. Der catch-Block sollte den Typ const char* angeben, um die ausgelösten string literals zu behandeln. Wenn die erste Validierung fehlschlägt, löst die Funktion eine Ausnahme aus und fährt nicht mit der Prüfung der zweiten Bedingung fort.
Probier es selbst
#include <iostream>
#include <string>
using namespace std;
int main() {
// Eingabe lesen
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: Schreibe deinen Code hier
// Erstelle die validateUser-Funktion und implementiere die Validierungslogik
// Verwende try-catch-Blöcke, um Ausnahmen zu behandeln
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen5Projekt: Inventar-Tool
Projekt-SetupArtikel hinzufügen und aktualisieren8Grundlagen der Fehlerbehandlung
Einführung in ExceptionsDie 'try'- und 'catch'-BlöckeDas 'throw'-SchlüsselwortVerschiedene Exception-TypenDer Catch-All-HandlerRückblick - Sichere Division3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügenÜbe selbstständig: Online-C++-Compiler