Die 'try'- und 'catch'-Blöcke
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 49 von 56.
Die try- und catch-Blöcke arbeiten zusammen, um ein Sicherheitsnetz für Ihren Code zu erstellen. Sie platzieren potenziell riskanten Code in einem try-Block, und wenn eine Ausnahme auftritt, springt das Programm zum entsprechenden catch-Block, um den Fehler ordnungsgemäß zu behandeln.
Hier ist die grundlegende Syntaxstruktur:
try {
// Code, der eine Exception auslösen könnte
} catch (exception_type e) {
// Code zur Behandlung der Exception
}Ein praktisches Beispiel ist das Konvertieren von Strings in Zahlen mit std::stoi, was eine std::invalid_argument Exception auslösen kann, wenn der String nicht-numerische Zeichen enthält:
try {
std::string input = "abc";
int number = std::stoi(input); // Dies wird eine Exception auslösen
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Wenn die Exception im try-Block auftritt, stoppt das Programm sofort die Ausführung des verbleibenden Codes in diesem Block und springt zum catch-Block. Dies verhindert, dass Ihr Programm abstürzt, und ermöglicht es Ihnen, den Benutzern aussagekräftiges Feedback zu geben, wenn etwas schiefgeht.
Aufgabe
EinfachErstellen Sie ein Programm, das die sichere Umwandlung von Zeichenfolgen in Zahlen mithilfe von try- und catch-Blöcken demonstriert. Diese Herausforderung testet Ihr Verständnis dafür, wie man Ausnahmen behandelt, die auftreten, wenn Benutzereingaben von Zeichenfolgen in Ganzzahlen umgewandelt werden.
Die folgende Eingabe wird bereitgestellt:
- Eine Zeichenfolge
userInput, die eine gültige Ganzzahl darstellen kann oder auch nicht
Ihr Programm sollte:
- Die Umwandlung von Zeichenfolge in Ganzzahl innerhalb eines
try-Blocks unter Verwendung vonstd::stoiplatzieren - Wenn die Umwandlung erfolgreich ist, die umgewandelte Zahl mit einer Erfolgsmeldung ausgeben
- Einen
catch-Block verwenden, umstd::invalid_argument-Ausnahmen zu behandeln, die auftreten, wenn die Zeichenfolge nicht-numerische Zeichen enthält - Im catch-Block eine Fehlermeldung ausgeben, die darauf hinweist, dass die Eingabe ungültig war
Verwenden Sie das folgende exakte Ausgabeformat:
Für eine erfolgreiche Umwandlung:
Valid number: [converted_number]Für eine ungültige Eingabe, die eine Ausnahme auslöst:
Error: Invalid inputDenken Sie daran, dass std::stoi eine std::invalid_argument-Ausnahme auslöst, wenn es auf eine Zeichenfolge stößt, die nicht in eine Ganzzahl umgewandelt werden kann. Der try-Block sollte den Umwandlungsversuch enthalten, und der catch-Block sollte den Ausnahmetyp als std::invalid_argument& angeben, um diesen spezifischen Fehler zu behandeln. Wenn eine Ausnahme auftritt, springt das Programm sofort vom try-Block zum passenden catch-Block, wodurch ein Absturz des Programms verhindert wird.
Spickzettel
Verwenden Sie try- und catch-Blöcke, um Ausnahmen sicher zu behandeln:
try {
// Code, der eine Ausnahme auslösen könnte
} catch (exception_type e) {
// Code zur Behandlung der Ausnahme
}Beispiel mit der String-zu-Integer-Konvertierung std::stoi:
try {
std::string input = "abc";
int number = std::stoi(input); // Dies wird eine Ausnahme auslösen
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Wenn eine Ausnahme im try-Block auftritt, springt das Programm sofort zum entsprechenden catch-Block, was Abstürze verhindert und eine kontrollierte Fehlerbehandlung ermöglicht.
Probier es selbst
#include <iostream>
#include <string>
using namespace std;
int main() {
// Eingabe lesen
string userInput;
cin >> userInput;
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie try-catch-Blöcke mit std::stoi, um den String zu konvertieren
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