Menu
Coddy logo textTech

Los bloques 'try' y 'catch'

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 49 de 56.

Los bloques try y catch trabajan juntos para crear una red de seguridad para tu código. Colocas código potencialmente riesgoso dentro de un bloque try y, si ocurre una excepción, el programa salta al bloque catch correspondiente para manejar el error de manera elegante.

Aquí está la estructura de sintaxis básica:

try {
    // Código que podría lanzar una excepción
} catch (exception_type e) {
    // Código para manejar la excepción
}

Un ejemplo práctico consiste en convertir cadenas a números utilizando std::stoi, que puede lanzar una excepción std::invalid_argument si la cadena contiene caracteres no numéricos:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // Esto lanzará una excepción
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

Cuando ocurre la excepción en el bloque try, el programa deja de ejecutar inmediatamente el código restante en ese bloque y salta al bloque catch. Esto evita que su programa se bloquee y le permite proporcionar comentarios significativos a los usuarios cuando algo sale mal.

challenge icon

Desafío

Fácil

Crea un programa que demuestre la conversión segura de cadena a número utilizando bloques try y catch. Este desafío pondrá a prueba tu comprensión sobre cómo manejar las excepciones que ocurren al convertir la entrada del usuario de cadenas a enteros.

Se proporcionará la siguiente entrada:

  • Una cadena userInput que puede o no representar un número entero válido

Tu programa debe:

  1. Colocar la conversión de cadena a entero dentro de un bloque try utilizando std::stoi
  2. Si la conversión tiene éxito, imprimir el número convertido con un mensaje de éxito
  3. Usar un bloque catch para manejar excepciones std::invalid_argument que ocurren cuando la cadena contiene caracteres no numéricos
  4. En el bloque catch, imprimir un mensaje de error indicando que la entrada no era válida

Utiliza el siguiente formato de salida exacto:

Para una conversión exitosa:

Valid number: [converted_number]

Para una entrada inválida que lanza una excepción:

Error: Invalid input

Recuerda que std::stoi lanzará una excepción std::invalid_argument cuando encuentre una cadena que no se pueda convertir a un entero. El bloque try debe contener el intento de conversión, y el bloque catch debe especificar el tipo de excepción como std::invalid_argument& para manejar este error específico. Cuando ocurre una excepción, el programa saltará inmediatamente del bloque try al bloque catch correspondiente, evitando que el programa se bloquee.

Hoja de referencia

Usa bloques try y catch para manejar excepciones de forma segura:

try {
    // Código que podría lanzar una excepción
} catch (exception_type e) {
    // Código para manejar la excepción
}

Ejemplo con la conversión de cadena a entero std::stoi:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // Esto lanzará una excepción
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

Cuando ocurre una excepción en el bloque try, el programa salta inmediatamente al bloque catch correspondiente, evitando cierres inesperados y permitiendo un manejo de errores controlado.

Pruébalo tú mismo

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

int main() {
    // Leer entrada
    string userInput;
    cin >> userInput;
    
    // TODO: Escribe tu código a continuación
    // Usa bloques try-catch con std::stoi para convertir la cadena
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo