Bloki „try” i „catch”
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 49 z 56.
Bloki try i catch współpracują ze sobą, tworząc siatkę bezpieczeństwa dla Twojego kodu. Umieszczasz potencjalnie ryzykowny kod w bloku try, a jeśli wystąpi wyjątek, program przechodzi do odpowiadającego mu bloku catch, aby sprawnie obsłużyć błąd.
Oto podstawowa struktura składni:
try {
// Kod, który może zgłosić wyjątek
} catch (exception_type e) {
// Kod obsługujący wyjątek
}Praktyczny przykład obejmuje konwersję ciągów znaków na liczby za pomocą std::stoi, która może zgłosić wyjątek std::invalid_argument, jeśli ciąg zawiera znaki nienumeryczne:
try {
std::string input = "abc";
int number = std::stoi(input); // To spowoduje zgłoszenie wyjątku
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Gdy wyjątek wystąpi w bloku try, program natychmiast przestaje wykonywać pozostały kod w tym bloku i przechodzi do bloku catch. Zapobiega to awarii programu i pozwala przekazać użytkownikom przydatne informacje, gdy coś pójdzie nie tak.
Wyzwanie
ŁatwyUtwórz program, który pokazuje bezpieczną konwersję ciągu znaków na liczbę przy użyciu bloków try i catch. To wyzwanie sprawdzi, czy rozumiesz, jak obsługiwać wyjątki występujące podczas konwertowania danych wejściowych użytkownika z ciągów znaków na liczby całkowite.
Dane wejściowe będą miały następującą postać:
- Ciąg znaków
userInput, który może, ale nie musi, reprezentować prawidłową liczbę całkowitą
Twój program powinien:
- Umieścić konwersję ciągu znaków na liczbę całkowitą w bloku
try, używającstd::stoi - Jeśli konwersja się powiedzie, wypisać przekonwertowaną liczbę wraz z komunikatem o powodzeniu
- Użyć bloku
catchdo obsługi wyjątkówstd::invalid_argument, które występują, gdy ciąg znaków zawiera znaki nienumeryczne - W bloku catch wypisać komunikat o błędzie informujący, że dane wejściowe były nieprawidłowe
Użyj dokładnie następującego formatu wyjściowego:
W przypadku pomyślnej konwersji:
Valid number: [converted_number]W przypadku nieprawidłowych danych wejściowych, które powodują wyjątek:
Error: Invalid inputPamiętaj, że std::stoi zgłosi wyjątek std::invalid_argument, gdy napotka ciąg znaków, którego nie można przekonwertować na liczbę całkowitą. Blok try powinien zawierać próbę konwersji, a blok catch powinien określać typ wyjątku jako std::invalid_argument&, aby obsłużyć ten konkretny błąd. Gdy wystąpi wyjątek, program natychmiast przejdzie z bloku try do pasującego bloku catch, zapobiegając awarii programu.
Spróbuj swoich sił
#include <iostream>
#include <string>
using namespace std;
int main() {
// Wczytaj dane wejściowe
string userInput;
cin >> userInput;
// TODO: Napisz swój kod poniżej
// Użyj bloków try-catch i std::stoi, aby przekonwertować ciąg znaków
return 0;
}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
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów8Podstawy obsługi błędów
Wprowadzenie do wyjątkówBloki „try” i „catch”Słowo kluczowe „throw”Różne typy wyjątkówObsługa wszystkich wyjątkówPodsumowanie — bezpieczne dzielenie3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online