Las constantes son rígidas. No cambian. La vida no es así y sus programas de prueba tampoco deberían serlo. Si estás aprendiendo C, codificar números como 5 y 7 envejece rápidamente. Quieres interacción. Quieres que la computadora espere a que escribas algo.
Ingrese “escanear”.
Es la otra mitad de la historia de “printf”. Mientras que “printf” envía datos a la pantalla, “scanf” extrae datos del teclado. No es la herramienta más sólida de la biblioteca estándar de C, pero para una entrada simple de la consola, hace el trabajo sin necesidad de una dependencia de terceros.
Así es como se toma un script estático y se vuelve dinámico.
El código
Copia esto. Ejecútelo. Escriba números cuando se lo solicite.
Desglosando scanf
La magia ocurre en estas dos líneas:
scanf("%d", &a);
scanf: El nombre de la función. Abreviatura de “escanear entrada formateada”."%d": El especificador de formato. Le dice ascanfque espere un número entero. Si estuvieras leyendo un flotante, usarías"%f".&a: Esta es la parte crítica. No estás pasando el valor de “a”. Estás pasando la dirección de “a”.
Piénselo de esta manera: printf necesita saber qué hay dentro de la variable. scanf necesita saber dónde colocar los datos. El operador & proporciona esa dirección de memoria. Sáltate el signo y te estrellarás. O peor aún, recibirá una advertencia que parece un galimatías y una variable que no cambia.
Cómo funciona en la práctica
Cuando ejecutas el programa:
- La terminal imprime:
Ingrese el primer valor: - El cursor parpadea. Espera. Estás atrapado aquí hasta que escribas algo y presiones Enter.
- Escribe “5”. Presionas Enter.
scanftoma ese5, convierte la cadena de caracteres “5” en el valor entero 5 y lo almacena en la dirección de memoria&a.- El mismo bucle ocurre con el segundo valor.
Luego vienen las matemáticas. c = a + b;. Suma sencilla.
Finalmente, printf muestra el resultado. Pero observe la cadena de formato: printf("%d + %d = %d\n", a, b, c);. Estás inyectando las variables nuevamente en la cadena. Así es como se crean resultados legibles.
Por qué esto es importante
La mayoría de las aplicaciones modernas no utilizan la entrada de la consola. No escribe comandos en un cuadro negro para su navegador web o su editor de fotos. Pero comprender este flujo es fundamental.
Entrada -> Proceso -> Salida.
Ese es el bucle básico de todo software. `
Cómo maneja scanf las direcciones de memoria
Cuando ejecuta este código, la diferencia entre el éxito y un fallo en tiempo de ejecución se reduce a un carácter. Específicamente, el signo comercial (& ) antes de las variables a y b.
Este es el operador de dirección. Le dice a scanf exactamente en qué parte de la memoria almacenar la entrada que recibe. Sin él, “scanf” no conoce la ubicación de la variable. Simplemente obtiene un valor, que es inútil para almacenar datos nuevamente en el programa. Si lo omite, el programa no se compilará o fallará inmediatamente después de la ejecución. Necesita este operador para los tipos char, int, float y estructura.
Intenta eliminarlo. Mira lo que pasa. Es una lección dolorosa pero necesaria sobre cómo C gestiona la memoria.
Dominar la salida de printf
printf es su ventana para el usuario. Envía datos a la salida estándar. La versión más simple es sencilla.
Esto imprime la palabra Hola. Nada más. Sin salto de línea. El cursor permanece justo después de la ‘o’.
Añade un carácter de nueva línea.
Ahora la salida pasa a la siguiente línea. El \n es un retorno de carro. Es esencial para que la salida de la consola sea legible.
Las variables cambian el juego. No puedes simplemente imprimir un nombre de variable como lo haces en Python o JavaScript. Debes utilizar un marcador de posición.
El %d es un marcador de posición. Se reemplaza por el valor entero de “b” en tiempo de ejecución. Así es como C maneja la salida dinámica.
Puedes mezclar texto y variables. Una forma complicada es encadenar varias impresiones.
Funciona. También es detallado. El enfoque más limpio integra todo en una sola cadena.
Los valores múltiples también funcionan. Simplemente mantenga los marcadores de posición alineados con los argumentos.
El orden importa. El primer %d se asigna a a. El segundo a b. El tercero a c. Si los intercambias, las matemáticas están mal. Si omite uno, el comportamiento no está definido. El número y tipo de operadores en la cadena de formato deben coincidir exactamente con los parámetros.
Marcadores de posición específicos del tipo
C es estricto con los tipos. No puedes usar el mismo marcador de posición para todo. Debe hacer coincidir el tipo de datos con el especificador de formato.
- Utilice %d para int (valores enteros).
- Utilice %f para float (números de punto flotante).
- Utilice %c para char (caracteres individuales).
- Utilice %s para cadenas de caracteres (matrices de caracteres).
Si usa %d para un flotante, obtendrá resultados basura. Si usa %s para un int, es probable que el programa falle. La precisión no es opcional aquí.
Para obtener detalles más profundos sobre estos especificadores, consulte el manual de UNIX. Escriba man 3 printf. Otros compiladores proporcionan documentación similar. Vale la pena leerlo.
Errores comunes que se deben evitar
Los compiladores de C son útiles, pero no leen la mente. Cometerás errores. A continuación se explica cómo evitar los más comunes.
- Distingue entre mayúsculas y minúsculas : C distingue entre mayúsculas y minúsculas.
PrintfoPRINTFfallarán. Debe ser “printf”. Lo mismo se aplica a los nombres de variables y llamadas a funciones. - Falta el operador de dirección : Olvidar el
&enscanfes un error frecuente. Provoca un fallo inmediato en el tiempo de ejecución. Inclúyalo siempre para tipos primitivos. - Parámetros no coincidentes : Demasiados o muy pocos argumentos en
printfoscanfgeneran errores. La cadena de formato dicta la estructura. Cíñete a ello. - Variables no declaradas : Debes declarar una variable antes de usarla. C no infiere tipos. Usted define
int a;antes de poder imprimira.
Estos errores son repetitivos. También son fáciles de arreglar una vez que reconoces el patrón.





























