Codificar números está bien para un primer intento, pero el software real necesita reaccionar a lo que la gente escribe. El fragmento original usaba constantes. Es estático. Previsible. Aburrido.
Para que un programa sea útil, es necesario extraer datos del usuario en tiempo de ejecución. Haces esto con scanf. Es la contraparte de “printf”. Donde “printf” envía datos a la pantalla, “scanf” los extrae del teclado.
Así es como se maneja la entrada básica de números enteros en C.
Capturando la entrada del usuario
No se puede simplemente declarar una variable y esperar que contenga datos del usuario mágicamente. Tienes que pedirlo. También necesita decirle a la computadora dónde almacenar esos datos. Es por eso que scanf requiere un puntero (el símbolo & ). Si olvida el signo comercial, el programa fallará o escribirá basura en la memoria. Inclúyalo siempre para tipos primitivos como int.
Considere esta lógica actualizada:
- Declarar variables para contener la entrada y el resultado.
- Preguntar al usuario para que sepa qué escribir.
- Utilice
scanfcon el especificador de formato correcto (%dpara números enteros). - Realice el cálculo utilizando los valores almacenados.
- Envíe el resultado mezclando las variables de entrada en la cadena de impresión.
Por qué esto es importante
El paso de constantes a variables lo cambia todo. El programa ya no es un disco rayado. Se adapta. Puedes ejecutarlo una vez con 5 y 7. Puedes ejecutarlo nuevamente con 100 y 200. La lógica sigue siendo la misma; los datos cambian.
Esta es la base de las aplicaciones CLI (Interfaz de línea de comando) interactivas. Antes de poder crear herramientas complejas, debe comprender cómo introducir datos en sus variables de forma segura.
Conclusiones clave
scanfnecesita un puntero: Utilice siempre el operador de dirección (&) antes del nombre de su variable enscanf.- Los especificadores de formato deben coincidir: Si estás leyendo un
int, debes usar%d. El uso de%fpara un número entero provocará un comportamiento indefinido. - Las indicaciones son cruciales: Sin una indicación clara como “Ingrese el primer valor:”, el usuario se queda mirando un cursor parpadeante, preguntándose si el programa está congelado. Que no es. Sólo está esperando.
El código funciona. Es sencillo. Pero es funcional. Ha pasado de un script estático a una herramienta dinámica. El siguiente paso suele ser el manejo de errores. ¿Qué sucede si el usuario escribe “hola” en lugar de un número? scanf fallará silenciosamente, dejando sus variables sin inicializar. Ese es un problema para otro día.
Por ahora, tienes un programa que realmente escucha.
Entradas, salidas y reglas de enfrentamiento
Has realizado las ediciones. Ahora compila. Ejecútelo. Si falla, no entre en pánico. Probablemente se le pasó por alto un pequeño detalle de sintaxis.
Tome “scanf”. Imita a printf en el uso de cadenas de formato. Escriba man scanf si necesita la letra pequeña. Pero preste atención al signo comercial (& ) antes de variables como a y b.
Este es el operador de dirección.
Devuelve la dirección de memoria de la variable. Puede que ahora parezca confuso. Los consejos aclararán esto más adelante. Pero por ahora, siga la regla: si está usando scanf en char, int o float, necesita &. También lo necesitas para estructuras.
¿Omitir el &? Recibirás un error de tiempo de ejecución. Rómpelo intencionalmente. Mira lo que pasa. Es la única manera de recordar por qué es importante.
Formatear la salida con precisión
Analicemos “printf”. Empiece de forma sencilla.
printf("Hola");
Esto envía la palabra “Hola” a la salida estándar. Nada más. Sin nueva línea. El cursor permanece justo después de la “o”.
Ahora agregue una nueva línea.
printf("Hola\n");
El \n desencadena un retorno de carro. La salida termina en su propia línea. Esta es la expectativa estándar para una salida limpia de la consola.
Las variables requieren marcadores de posición. Para imprimir el valor de b :
printf("%d", b);
El %d es un marcador de posición. Cuando se ejecuta el código, printf lo intercambia por el valor entero real de b.
Puede insertar valores en oraciones. Podrías encadenar varias llamadas:
printf("La temperatura es "); printf("%d", b); printf("grados\n");
Pero eso es tedioso. El enfoque más limpio los combina en una cadena de formato:
printf("La temperatura es %d grados\n", b);
Los valores múltiples también funcionan.
printf("%d + %d = %d\n", a, b, c);
Aquí está la trampa. La cantidad de marcadores de posición en la cadena de formato debe coincidir con la cantidad de variables que la siguen. Exactamente.
Si tiene tres etiquetas %d, necesita tres parámetros. Los tipos deben coincidir. El orden debe coincidir. ¿No coinciden con estos? El resultado será basura. O peor aún, colapsará.
Tipos coincidentes con marcadores de posición
printf maneja la mayoría de los tipos C estándar. Sólo necesitas el código correcto.
- int usa
%d - flotante usa
%f - char usa
%c - cadenas de caracteres use
%s
Para obtener matices más profundos, consulte man 3 printf en un sistema UNIX. Es probable que su compilador específico tenga un manual o un archivo de ayuda que cubra los casos extremos.
Errores comunes
Los nuevos desarrolladores tropiezan con ellos repetidamente.
La distinción entre mayúsculas y minúsculas es estricta. printf está en minúsculas. Printf o PRINTF fallarán.
scanf exige el operador de dirección (& ). Olvídelo y el programa no almacenará su entrada correctamente.
El recuento de parámetros importa. Demasiados o muy pocos argumentos en “printf” o “scanf” conducen a un comportamiento indefinido.
La declaración viene antes del uso. No se puede utilizar un nombre de variable en C sin declararlo primero. El compilador necesita conocer de antemano el diseño y el tipo de memoria.
El compilador no adivina. Hace cumplir.






















