Menu
Coddy logo textTech

I blocchi 'try' e 'catch'

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 49 di 56.

I blocchi try e catch lavorano insieme per creare una rete di sicurezza per il tuo codice. Inserisci il codice potenzialmente rischioso all’interno di un blocco try e, se si verifica un’eccezione, il programma passa al blocco catch corrispondente per gestire l’errore in modo appropriato.

Ecco la struttura sintattica di base:

try {
    // Codice che potrebbe generare un'eccezione
} catch (exception_type e) {
    // Codice per gestire l'eccezione
}

Un esempio pratico consiste nel convertire stringhe in numeri usando std::stoi, che può generare un'eccezione std::invalid_argument se la stringa contiene caratteri non numerici:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // Questo genererà un'eccezione
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

Quando si verifica l'eccezione nel blocco try, il programma interrompe immediatamente l'esecuzione del codice rimanente in quel blocco e passa al blocco catch. Questo impedisce al programma di arrestarsi in modo anomalo e ti permette di fornire agli utenti un feedback utile quando qualcosa va storto.

challenge icon

Sfida

Facile

Crea un programma che dimostri la conversione sicura da stringa a numero usando blocchi try e catch. Questa sfida metterà alla prova la tua comprensione di come gestire le eccezioni che si verificano quando si converte l'input dell'utente da stringhe a interi.

Verrà fornito il seguente input:

  • Una stringa userInput che può rappresentare o meno un intero valido

Il tuo programma dovrebbe:

  1. Inserire la conversione da stringa a intero in un blocco try usando std::stoi
  2. Se la conversione riesce, stampare il numero convertito con un messaggio di conferma
  3. Usare un blocco catch per gestire le eccezioni std::invalid_argument che si verificano quando la stringa contiene caratteri non numerici
  4. Nel blocco catch, stampare un messaggio di errore che indichi che l'input non era valido

Usa il seguente formato di output esatto:

In caso di conversione riuscita:

Valid number: [converted_number]

In caso di input non valido che genera un'eccezione:

Error: Invalid input

Ricorda che std::stoi genererà un'eccezione std::invalid_argument quando incontra una stringa che non può essere convertita in un intero. Il blocco try dovrebbe contenere il tentativo di conversione e il blocco catch dovrebbe specificare il tipo di eccezione come std::invalid_argument& per gestire questo errore specifico. Quando si verifica un'eccezione, il programma passerà immediatamente dal blocco try al blocco catch corrispondente, impedendo al programma di bloccarsi.

Provalo tu

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

int main() {
    // Leggi l'input
    string userInput;
    cin >> userInput;
    
    // TODO: Scrivi il tuo codice qui sotto
    // Usa blocchi try-catch con std::stoi per convertire la stringa
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online