Os Blocos 'try' e 'catch'
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 49 de 56.
Os blocos try e catch trabalham juntos para criar uma rede de segurança para o seu código. Você coloca código potencialmente arriscado dentro de um bloco try e, se uma exceção ocorrer, o programa pula para o bloco catch correspondente para lidar com o erro de forma graciosa.
Aqui está a estrutura básica da sintaxe:
try {
// Código que pode lançar uma exceção
} catch (exception_type e) {
// Código para lidar com a exceção
}Um exemplo prático envolve a conversão de strings para números usando std::stoi, que pode lançar uma exceção std::invalid_argument se a string contiver caracteres não numéricos:
try {
std::string input = "abc";
int number = std::stoi(input); // Isso lançará uma exceção
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Quando a exceção ocorre no bloco try, o programa para imediatamente de executar o código restante nesse bloco e pula para o bloco catch. Isso evita que seu programa trave e permite que você forneça um feedback significativo aos usuários quando algo der errado.
Desafio
FácilCrie um programa que demonstre a conversão segura de string para número usando blocos try e catch. Este desafio testará sua compreensão de como lidar com exceções que ocorrem ao converter a entrada do usuário de strings para inteiros.
A seguinte entrada será fornecida:
- Uma string
userInputque pode ou não representar um número inteiro válido
Seu programa deve:
- Colocar a conversão de string para inteiro dentro de um bloco
tryusandostd::stoi - Se a conversão for bem-sucedida, imprimir o número convertido com uma mensagem de sucesso
- Usar um bloco
catchpara lidar com exceçõesstd::invalid_argumentque ocorrem quando a string contém caracteres não numéricos - No bloco catch, imprimir uma mensagem de erro indicando que a entrada era inválida
Use o seguinte formato de saída exato:
Para conversão bem-sucedida:
Valid number: [converted_number]Para entrada inválida que lança uma exceção:
Error: Invalid inputLembre-se de que std::stoi lançará uma exceção std::invalid_argument quando encontrar uma string que não pode ser convertida em um número inteiro. O bloco try deve conter a tentativa de conversão, e o bloco catch deve especificar o tipo de exceção como std::invalid_argument& para lidar com esse erro específico. Quando uma exceção ocorre, o programa saltará imediatamente do bloco try para o bloco catch correspondente, evitando que o programa trave.
Folha de consulta
Use os blocos try e catch para tratar exceções com segurança:
try {
// Código que pode lançar uma exceção
} catch (exception_type e) {
// Código para tratar a exceção
}Exemplo com a conversão de string para inteiro std::stoi:
try {
std::string input = "abc";
int number = std::stoi(input); // Isso lançará uma exceção
std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
std::cout << "Invalid input! Please enter a valid number." << std::endl;
}Quando uma exceção ocorre no bloco try, o programa pula imediatamente para o bloco catch correspondente, evitando falhas e permitindo um tratamento de erro gracioso.
Experimente você mesmo
#include <iostream>
#include <string>
using namespace std;
int main() {
// Ler a entrada
string userInput;
cin >> userInput;
// TODO: Escreva seu código abaixo
// Use blocos try-catch com std::stoi para converter a string
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores5Projeto: Ferramenta de Inventário
Configuração do ProjetoAdicionando e Atualizando Itens8Tratamento Básico de Erros
Introdução a ExceçõesOs Blocos 'try' e 'catch'A Palavra-chave 'throw'Diferentes Tipos de ExceçãoO Manipulador Catch-AllRecapitulação - Divisão Segura3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa