Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Umieścić konwersję ciągu znaków na liczbę całkowitą w bloku try, używając std::stoi
  2. Jeśli konwersja się powiedzie, wypisać przekonwertowaną liczbę wraz z komunikatem o powodzeniu
  3. Użyć bloku catch do obsługi wyjątków std::invalid_argument, które występują, gdy ciąg znaków zawiera znaki nienumeryczne
  4. 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 input

Pamię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;
}
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