Cómo usar la función scanf en C: Guía completa con ejemplos prácticos

1. ¿Qué es la función scanf?

Al aprender C, una de las formas más comunes de introducir datos en un programa es mediante la función scanf. Esta función actúa como un «oyente» del programa, ya que recibe los datos que el usuario introduce y los almacena en las variables especificadas.

Sintaxis básica de scanf

scanf("especificador de formato", &variable);
Lo importante aquí son el «especificador de formato» y el & que se coloca delante de la variable. El especificador de formato indica el tipo de dato que se espera, mientras que & señala la dirección de memoria de la variable. Siguiendo esta simple regla, scanf puede procesar correctamente la entrada del usuario. Por ejemplo, para leer un número entero:
int num;
scanf("%d", &num);
De esta manera, se introduce un dato en el programa y se deja listo para su uso. En definitiva, scanf es un aliado confiable para la entrada de datos en C.

2. Especificadores de formato más usados

La gran ventaja de scanf es que permite trabajar con diferentes tipos de datos. Los especificadores de formato le indican al programa qué tipo de dato esperar. Veamos los más utilizados:

Principales especificadores de formato

  • %d: Para enteros.
  • %f: Para números de punto flotante tipo float.
  • %lf: Para números de punto flotante de doble precisión (double).
  • %s: Para cadenas de caracteres (no reconoce espacios en blanco).
  • %c: Para un solo carácter.
Por ejemplo, si el usuario introduce un número decimal y se quiere almacenar en un double:
double val;
scanf("%lf", &val);
En este caso, %lf indica que se trata de un número de doble precisión. Gracias a estos especificadores, scanf puede manejar una amplia variedad de entradas.
侍エンジニア塾

3. Procesar múltiples entradas a la vez

A veces es necesario leer varios valores de una sola vez, como la edad y la estatura de un usuario. Con scanf se pueden usar varios especificadores de formato en la misma llamada:
int age;
float height;
scanf("%d %f", &age, &height);
Así se leen ambos valores simultáneamente. Para mostrarlos:
printf("Edad: %d, Estatura: %.2f", age, height);
¡De esta forma se resuelve fácilmente la entrada múltiple!

4. Validación de entrada y manejo de errores

No siempre los usuarios introducen datos válidos. Es necesario prever situaciones como «edad inválida» o números negativos. Aquí es donde entra la validación y el manejo de errores.

Comprobar errores con el valor de retorno de scanf

scanf devuelve la cantidad de datos leídos correctamente. Podemos usarlo para validar la entrada. Ejemplo:
int age;
printf("Introduce tu edad (0–120): ");
if (scanf("%d", &age) == 1 && age >= 0 && age <= 120) {
    printf("La edad introducida es %d años.\n", age);
} else {
    printf("Edad inválida.\n");
}
Con esto comprobamos que la entrada tiene el formato correcto y que la edad está en un rango válido.

5. Limpiar el flujo de entrada

Es común que queden caracteres residuales en el flujo de entrada (como el salto de línea al presionar Enter). Esto puede afectar las siguientes lecturas. Para limpiar el buffer de entrada se puede usar:
scanf("%*[^
]");
scanf("%*c");
Esto elimina los caracteres sobrantes y evita errores inesperados en la siguiente entrada.

6. Errores comunes y buenas prácticas

Entre los errores más frecuentes al comenzar con scanf están: usar el especificador equivocado (%s en lugar de %d) o olvidar el & delante de la variable.

Buenas prácticas

  • Coincidencia entre especificador y tipo de dato: %d con int, %f con float, etc.
  • Cuidado con la longitud de cadenas: prevenir desbordamientos de buffer.
  • Limpiar siempre el flujo de entrada: como se explicó antes.
Siguiendo estas pautas, la entrada de datos será más segura y confiable.

7. Uso avanzado de scanf

scanf también permite usos más avanzados, como leer directamente cadenas en arreglos de caracteres.

Entrada de cadenas

char name[20];
printf("Introduce tu nombre: ");
scanf("%s", name);
printf("¡Hola, %s!", name);
Este programa simple solicita el nombre y luego muestra un saludo.

Conclusión

La función scanf en C es muy poderosa: permite manejar entradas de todo tipo si se usa correctamente. Recuerda: utiliza los especificadores adecuados, valida los datos y limpia el flujo de entrada. Siguiendo estas reglas, scanf será una herramienta clave en tu aprendizaje y práctica de programación en C.