Menu
Coddy logo textTech

A Palavra-chave 'throw'

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 50 de 56.

Às vezes, você precisa sinalizar que um erro ocorreu em seu próprio código, em vez de apenas capturar exceções lançadas por outras funções. A palavra-chave throw permite que você dispare manualmente uma exceção quando seu programa detecta um problema.

Você pode lançar diferentes tipos de valores como exceções - inteiros, strings ou até mesmo objetos personalizados. Aqui está a sintaxe básica:

if (someErrorCondition) {
    throw "Error message";  // Lança uma string literal
}

Quando você usa throw, o programa interrompe imediatamente a execução da função atual e procura por um bloco catch que possa lidar com o valor lançado. Isso é particularmente útil para validar entradas ou verificar condições que não deveriam ocorrer durante a execução normal do programa.

Aqui está um exemplo prático de como lançar uma exceção ao detectar uma entrada inválida:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

A palavra-chave throw oferece controle sobre quando e como os erros são relatados em seus programas, tornando suas funções mais robustas e previsíveis ao lidar com condições inválidas.

challenge icon

Desafio

Fácil

Crie um programa que implemente a validação de entrada usando a palavra-chave throw para disparar exceções manualmente quando condições inválidas forem detectadas. Este desafio testará sua compreensão de como usar throw para sinalizar erros em suas próprias funções.

As seguintes entradas serão fornecidas:

  • Uma string username representando o nome de usuário escolhido por um usuário
  • Um número inteiro age representando a idade do usuário

Seu programa deve:

  1. Criar uma função chamada validateUser que recebe uma string e um inteiro como parâmetros
  2. Dentro da função, verificar se o nome de usuário está vazio (tem comprimento 0)
  3. Se o nome de usuário estiver vazio, use throw com a string "Username cannot be empty"
  4. Verificar se a idade é menor que 13
  5. Se a idade for menor que 13, use throw com a string "Age must be at least 13"
  6. Se ambas as validações passarem, imprima "User validation successful"
  7. Na função principal, chame validateUser com os valores de entrada
  8. Use um bloco try para chamar a função e um bloco catch para tratar quaisquer exceções de string lançadas

Use o seguinte formato de saída exato:

Para validação bem-sucedida:

User validation successful

Para erros de validação:

Validation error: [error_message]

Lembre-se de que, ao usar throw, o programa interrompe imediatamente a execução da função atual e procura por um bloco catch correspondente. O bloco catch deve especificar o tipo const char* para lidar com os literais de string lançados. Se a primeira validação falhar, a função lançará uma exceção e não continuará a verificar a segunda condição.

Folha de consulta

A palavra-chave throw permite que você dispare exceções manualmente quando seu programa detecta um problema:

if (someErrorCondition) {
    throw "Error message";  // Lança uma string literal
}

Quando você usa throw, o programa para imediatamente de executar a função atual e procura por um bloco catch que possa lidar com o valor lançado.

Exemplo de lançamento de uma exceção para validação de entrada:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

Você pode lançar diferentes tipos de valores como exceções - inteiros, strings ou objetos personalizados. Use const char* em blocos catch para lidar com strings literais lançadas.

Experimente você mesmo

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

int main() {
    // Ler entrada
    string username;
    int age;
    cin >> username;
    cin >> age;
    
    // TODO: Escreva seu código aqui
    // Crie a função validateUser e implemente a lógica de validação
    // Use blocos try-catch para lidar com exceções
    
    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