Fundamentos de C/C++

Ler e validar dados de entrada em C e C++

Nesta lição, você vai ler os dados digitados pelo usuário e rejeitar valores inválidos em C e em C++.

Introdução

Ler dados do usuário sempre pode falhar, por exemplo quando o programa espera um número e o usuário digita letras. Por isso, o programa precisa verificar o resultado da leitura em vez de supor que os dados estão sempre corretos.

Pontos importantes

  • Ative os avisos do compilador (compiler warnings) e corrija todos eles.
  • Entenda o tipo de dado e o tempo de vida (lifetime) de cada valor.
  • Sempre valide os dados de entrada e os limites dos índices de arrays.

Exemplos de código C e C++

C
Executar →
main.c
#include <stdio.h>

int main(void) {
    int age;
    printf("Age: ");
    if (scanf("%d", &age) != 1 || age < 0) {
        puts("Invalid age");
        return 1;
    }
    printf("Next year: %d\n", age + 1);
    return 0;
}
Resultado da execução
Age: 20
Next year: 21
C++
Executar →
main.cpp
#include <iostream>

int main() {
    int age;
    std::cout << "Age: ";
    if (!(std::cin >> age) || age < 0) {
        std::cerr << "Invalid age\n";
        return 1;
    }
    std::cout << "Next year: " << age + 1 << '\n';
}
Resultado da execução
Age: 20
Next year: 21

Comparação entre C e C++

Em C, scanf retorna quantos valores foram lidos com sucesso, então a condição scanf(...) != 1 indica que a leitura da idade falhou. Em C++, quando std::cin não consegue ler o dado no tipo pedido, ele entra em estado de erro e a expressão de verificação dá falso. Os dois programas também rejeitam idades negativas.

C

C usa funções procedurais pequenas e deixa à vista como os dados ficam na memória.

C++

C++ continua permitindo trabalhar em baixo nível, mas acrescenta tipos da biblioteca e abstrações mais seguras.

Exercícios práticos

Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.

  • Teste entradas inválidas e valores nos limites.
  • Compile com as flags -Wall -Wextra -Wpedantic para ativar mais avisos.
  • Separe as declarações compartilhadas em um arquivo de cabeçalho e a implementação em outro arquivo.

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios