Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie 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 userInput que pode ou não representar um número inteiro válido

Seu programa deve:

  1. Colocar a conversão de string para inteiro dentro de um bloco try usando std::stoi
  2. Se a conversão for bem-sucedida, imprimir o número convertido com uma mensagem de sucesso
  3. Usar um bloco catch para lidar com exceções std::invalid_argument que ocorrem quando a string contém caracteres não numéricos
  4. 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 input

Lembre-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;
}
quiz iconTeste seus conhecimentos

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