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.
Sfida
FacileCrea 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
userInputche può rappresentare o meno un intero valido
Il tuo programma dovrebbe:
- Inserire la conversione da stringa a intero in un blocco
tryusandostd::stoi - Se la conversione riesce, stampare il numero convertito con un messaggio di conferma
- Usare un blocco
catchper gestire le eccezionistd::invalid_argumentche si verificano quando la stringa contiene caratteri non numerici - 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 inputRicorda 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;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli8Gestione di base degli errori
Introduzione alle eccezioniI blocchi 'try' e 'catch'La parola chiave 'throw'Diversi tipi di eccezioniIl gestore catch-allRiepilogo - Divisione sicura3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online