Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Cré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 userInput qui peut ou non représenter un entier valide

Votre programme doit :

  1. Placer la conversion de la chaîne en entier à l'intérieur d'un bloc try en utilisant std::stoi
  2. Si la conversion réussit, afficher le nombre converti avec un message de succès
  3. Utiliser un bloc catch pour gérer les exceptions std::invalid_argument qui surviennent lorsque la chaîne contient des caractères non numériques
  4. 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 input

N'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;
}
quiz iconTestez-vous

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