Les blocs 'try' et 'catch'
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 49 sur 56.
Les blocs try et catch travaillent ensemble pour créer un filet de sécurité pour votre code. Vous placez le code potentiellement risqué à l'intérieur d'un bloc try, et si une exception se produit, le programme saute vers le bloc catch correspondant pour gérer l'erreur de manière élégante.
Voici la structure syntaxique de base :
try {
// Code qui pourrait lever une exception
} catch (exception_type e) {
// Code pour gérer l'exception
}Un exemple pratique consiste à convertir des chaînes de caractères en nombres à l'aide de std::stoi, ce qui peut lever une exception std::invalid_argument si la chaîne contient des caractères non numériques :
try {
std::string input = "abc";
int number = std::stoi(input); // Cela lèvera une exception
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Lorsqu'une exception se produit dans le bloc try, le programme arrête immédiatement l'exécution du code restant dans ce bloc et passe au bloc catch. Cela empêche votre programme de planter et vous permet de fournir un retour d'information significatif aux utilisateurs lorsque les choses tournent mal.
Défi
FacileCréez un programme qui démontre la conversion sécurisée d'une chaîne de caractères en nombre en utilisant des blocs try et catch. Ce défi testera votre compréhension de la gestion des exceptions qui surviennent lors de la conversion d'une saisie utilisateur de chaînes de caractères en entiers.
L'entrée suivante sera fournie :
- Une chaîne
userInputqui peut ou non représenter un entier valide
Votre programme doit :
- Placer la conversion de la chaîne en entier à l'intérieur d'un bloc
tryen utilisantstd::stoi - Si la conversion réussit, afficher le nombre converti avec un message de succès
- Utiliser un bloc
catchpour gérer les exceptionsstd::invalid_argumentqui surviennent lorsque la chaîne contient des caractères non numériques - Dans le bloc catch, afficher un message d'erreur indiquant que la saisie était invalide
Utilisez le format de sortie exact suivant :
Pour une conversion réussie :
Valid number: [converted_number]Pour une saisie invalide qui lève une exception :
Error: Invalid inputN'oubliez pas que std::stoi lèvera une exception std::invalid_argument lorsqu'il rencontrera une chaîne qui ne peut pas être convertie en entier. Le bloc try doit contenir la tentative de conversion, et le bloc catch doit spécifier le type d'exception comme std::invalid_argument& pour gérer cette erreur spécifique. Lorsqu'une exception survient, le programme passera immédiatement du bloc try au bloc catch correspondant, empêchant ainsi le programme de planter.
Aide-mémoire
Utilisez les blocs try et catch pour gérer les exceptions en toute sécurité :
try {
// Code qui pourrait lever une exception
} catch (exception_type e) {
// Code pour gérer l'exception
}Exemple avec la conversion chaîne-vers-entier std::stoi :
try {
std::string input = "abc";
int number = std::stoi(input); // Cela va lever une exception
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Lorsqu'une exception se produit dans le bloc try, le programme saute immédiatement vers le bloc catch correspondant, évitant ainsi les plantages et permettant une gestion d'erreur élégante.
Essayez vous-même
#include <iostream>
#include <string>
using namespace std;
int main() {
// Lire l'entrée
string userInput;
cin >> userInput;
// TODO : Écrivez votre code ci-dessous
// Utilisez des blocs try-catch avec std::stoi pour convertir la chaîne
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs5Projet : Outil d'inventaire
Configuration du projetAjout et mise à jour d'articles8Gestion de base des erreurs
Introduction aux exceptionsLes blocs 'try' et 'catch'Le mot-clé 'throw'Les différents types d'exceptionsLe gestionnaire d'exceptions génériqueRécapitulatif - Division sécurisée3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche