Fundamentos de C/C++

Leer y validar la entrada en C y C++

En esta lección vas a leer los datos que escribe el usuario y rechazar los valores no válidos tanto en C como en C++.

Introducción

Leer una entrada siempre puede fallar, por ejemplo cuando el programa espera un número y el usuario escribe letras. Por eso el programa debe comprobar el resultado de la lectura en lugar de suponer que los datos siempre son correctos.

Puntos importantes

  • Activa los avisos del compilador (compiler warnings) y corrígelos todos.
  • Entiende bien el tipo y la vida útil (lifetime) de cada valor.
  • Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.

Ejemplos de código C y C++

C
Ejecutar →
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 de la ejecución
Age: 20
Next year: 21
C++
Ejecutar →
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 de la ejecución
Age: 20
Next year: 21

Comparación entre C y C++

En C, scanf devuelve el número de valores leídos con éxito, así que la condición scanf(...) != 1 indica que la lectura de la edad ha fallado. En C++, cuando std::cin no consigue leer un dato del tipo pedido, pasa a un estado de error y la expresión de comprobación se vuelve falsa. Los dos programas también rechazan las edades negativas.

C

C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.

C++

C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Prueba entradas no válidas y valores límite.
  • Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
  • Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos