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.
Desafío
FácilCrea 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
userInputque puede o no representar un número entero válido
Tu programa debe:
- Colocar la conversión de cadena a entero dentro de un bloque
tryutilizandostd::stoi - Si la conversión tiene éxito, imprimir el número convertido con un mensaje de éxito
- Usar un bloque
catchpara manejar excepcionesstd::invalid_argumentque ocurren cuando la cadena contiene caracteres no numéricos - 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 inputRecuerda 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;
}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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos8Manejo básico de errores
Introducción a las excepcionesLos bloques 'try' y 'catch'La palabra clave 'throw'Diferentes tipos de excepcionesEl manejador genérico (catch-all)Repaso: División segura3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea