Hasta ahora viste que un programa puede guardar información en variables. Pero un programa realmente empieza a resultar útil cuando puede mostrar información y también recibir datos.
A eso lo llamamos salida y entrada.
- Salida: cuando el programa muestra información hacia afuera, por ejemplo en pantalla.
- Entrada: cuando el programa recibe información desde afuera, por ejemplo cuando una persona escribe con el teclado.
En esta lección vas a aprender:
- qué significa entrada y salida en un programa
- cómo mostrar mensajes y valores con
printf - qué son los especificadores de formato
- cómo leer datos simples con
scanf - por qué a veces aparece el símbolo
& - errores comunes al empezar con entrada y salida
Idea clave: un programa sin entrada ni salida es como una persona que piensa pero no habla ni escucha. Puede tener datos adentro, pero no interactúa con nadie.
¿Qué es la salida de datos?
La salida de datos ocurre cuando el programa envía información hacia el exterior.
En los programas iniciales en C, la salida más común es mostrar texto o valores en la pantalla.
Por ejemplo, un programa puede mostrar:
- un mensaje de bienvenida
- el valor de una variable
- el resultado de un cálculo
En C, la función más usada para esto es printf.
printf: mostrar información en pantalla
La función printf() sirve para imprimir texto en pantalla.
Ejemplo:
#include <stdio.h>
int main() {
printf("Hola, mundo\n");
return 0;
}
Ese programa muestra el mensaje Hola, mundo.
¿Qué significa \n?
Dentro del texto aparece esto:
\n
Eso representa un salto de línea.
Es decir, después de mostrar el texto, el cursor baja a la línea siguiente.
Por ejemplo:
printf("Primera línea\n");
printf("Segunda línea\n");
La salida sería:
Primera línea
Segunda línea
printf mostrando solo texto
Al principio, printf puede usarse simplemente para mostrar mensajes.
printf("Bienvenido al programa\n");
printf("C es un lenguaje poderoso\n");
Fijate que el texto va entre comillas dobles.
Eso indica que estamos escribiendo un mensaje literal para mostrar en pantalla.
Mostrar el valor de una variable
printf no solo sirve para mostrar texto fijo. También puede mostrar el valor guardado en una variable.
Mirá este ejemplo:
#include <stdio.h>
int main() {
int edad = 18;
printf("La edad es %d\n", edad);
return 0;
}
Acá aparece algo nuevo:
%d
Eso se llama especificador de formato.
¿Qué es un especificador de formato?
Un especificador de formato le indica a printf qué tipo de dato tiene que mostrar en ese lugar del texto.
Pensalo así: dentro del mensaje dejamos un espacio reservado para que después aparezca el valor de una variable.
En este ejemplo:
printf("La edad es %d\n", edad);
- el texto es
La edad es %dle dice aprintfque ahí va un número enteroedades la variable cuyo valor se va a mostrar
Si edad vale 18, la salida será:
La edad es 18
Especificadores más comunes al comenzar
Por ahora, los más importantes son estos:
%d
Se usa para mostrar valores de tipo int.
int cantidad = 25;
printf("Cantidad: %d\n", cantidad);
%f
Se usa para mostrar valores de tipo float.
float altura = 1.75;
printf("Altura: %f\n", altura);
%c
Se usa para mostrar valores de tipo char.
char inicial = 'F';
printf("Inicial: %c\n", inicial);
Ejemplos separados por tipo de dato
Mostrar un entero
#include <stdio.h>
int main() {
int edad = 20;
printf("Edad: %d\n", edad);
return 0;
}
Mostrar un decimal
#include <stdio.h>
int main() {
float precio = 1499.50;
printf("Precio: %f\n", precio);
return 0;
}
Mostrar un carácter
#include <stdio.h>
int main() {
char letra = 'A';
printf("Letra: %c\n", letra);
return 0;
}
Mezclar texto y valores
Una de las cosas más útiles de printf es que permite combinar texto con valores.
#include <stdio.h>
int main() {
int edad = 18;
float altura = 1.72;
char inicial = 'F';
printf("Edad: %d\n", edad);
printf("Altura: %f\n", altura);
printf("Inicial: %c\n", inicial);
return 0;
}
Esto hace que la información del programa pueda verse de forma clara para quien lo usa.
¿Qué es la entrada de datos?
La entrada de datos ocurre cuando el programa recibe información desde el exterior.
En los programas básicos en C, eso suele pasar cuando el usuario escribe datos con el teclado.
Por ejemplo, el programa puede pedir:
- una edad
- un número
- una letra
- un precio
En C, una de las funciones más conocidas para leer datos básicos es scanf().
scanf: leer datos ingresados por el usuario
La función scanf() permite leer datos que el usuario escribe.
Ejemplo:
#include <stdio.h>
int main() {
int edad;
printf("Ingrese su edad: ");
scanf("%d", &edad);
printf("Usted tiene %d años\n", edad);
return 0;
}
¿Qué hace este programa?
Paso a paso:
- declara una variable llamada
edad - muestra el mensaje
Ingrese su edad: - espera que el usuario escriba un número
- guarda ese número en la variable
edad - muestra el valor guardado
Esto ya permite interacción real entre el usuario y el programa.
La estructura básica de scanf
La forma general es:
scanf("especificador", &variable);
Por ejemplo:
scanf("%d", &edad);
Acá:
%dindica que se espera un entero&edadindica dónde se va a guardar el valor leído
¿Por qué aparece & en scanf?
Excelente pregunta. Y sí, esta parte suele confundir al principio.
Cuando usás scanf, el programa necesita saber dónde guardar el dato que el usuario escribió.
Por eso aparece el símbolo & antes del nombre de la variable.
En esta etapa, alcanza con esta idea:
&variablele permite ascanftrabajar directamente con esa variable para guardar ahí el dato leído.
No hace falta meterse todavía con explicaciones más avanzadas.
Por ahora, quedate con esta regla práctica:
- con
scanf, para leerint,floatychar, normalmente vas a usar&antes de la variable
Leer un entero con scanf
#include <stdio.h>
int main() {
int numero;
printf("Ingrese un número entero: ");
scanf("%d", &numero);
printf("El número ingresado es %d\n", numero);
return 0;
}
Leer un decimal con scanf
#include <stdio.h>
int main() {
float precio;
printf("Ingrese un precio: ");
scanf("%f", &precio);
printf("El precio ingresado es %f\n", precio);
return 0;
}
Leer un carácter con scanf
#include <stdio.h>
int main() {
char inicial;
printf("Ingrese una letra: ");
scanf(" %c", &inicial);
printf("La letra ingresada es %c\n", inicial);
return 0;
}
Fijate en este detalle:
" %c"
Hay un espacio antes de %c.
Y no está puesto porque sí.
Un problema muy común con scanf y %c
Cuando leemos primero un número y después un carácter, muchas veces pasa esto:
- el programa pide un número
- escribimos el número y apretamos Enter
- después el programa pide una letra
- pero parece que “se saltea” la lectura del carácter
Mirá este ejemplo:
#include <stdio.h>
int main() {
int ruedas;
char inicialMarca;
printf("Ingrese la cantidad de ruedas: ");
scanf("%d", &ruedas);
printf("Ingrese la inicial de la marca: ");
scanf("%c", &inicialMarca);
printf("Ruedas: %d\n", ruedas);
printf("Inicial: %c\n", inicialMarca);
return 0;
}
A simple vista parece correcto. Pero puede fallar.
¿Qué está pasando realmente?
Cuando escribís un número como 4 y después apretás Enter, no solo se ingresa el 4.
También queda registrado el salto de línea que produce la tecla Enter.
Entonces, después de esto:
scanf("%d", &ruedas);
el número se guarda en ruedas, pero el \n del Enter puede quedar en el buffer de entrada.
Luego, cuando hacés esto:
scanf("%c", &inicialMarca);
scanf toma el siguiente carácter disponible.
Y ese siguiente carácter puede ser justamente el salto de línea \n que quedó pendiente.
Por eso parece que el programa “se saltea” el prompt, cuando en realidad sí leyó algo: leyó el Enter anterior como carácter válido.
Solución simple
La solución práctica más común al empezar es escribir un espacio antes de %c.
Así:
scanf(" %c", &inicialMarca);
Ese espacio le dice a scanf que ignore cualquier whitespace anterior antes de leer el carácter real.
¿Qué significa whitespace?
Significa caracteres en blanco, por ejemplo:
- espacios
- tabulaciones
- saltos de línea
Entonces, si quedó un \n del Enter anterior, ese espacio hace que scanf lo descarte y siga esperando una letra real.
Ejemplo corregido
#include <stdio.h>
int main() {
int ruedas;
char inicialMarca;
printf("Ingrese la cantidad de ruedas: ");
scanf("%d", &ruedas);
printf("Ingrese la inicial de la marca: ");
scanf(" %c", &inicialMarca);
printf("Ruedas: %d\n", ruedas);
printf("Inicial: %c\n", inicialMarca);
return 0;
}
Idea práctica para principiantes
Cuando uses scanf para leer un char, esta forma es una muy buena costumbre:
scanf(" %c", &variableChar);
No porque siempre haya un problema, sino porque evita uno de los errores más comunes al empezar.
Relación entre tipos y especificadores
Hay una relación directa entre el tipo de dato y el especificador que usás.
Para mostrar con printf
int→%dfloat→%fchar→%c
Para leer con scanf
int→%dfloat→%fchar→%c
Esto hay que aprenderlo bien, porque si mezclás tipos y especificadores, el programa deja de comportarse como esperás.
Un ejemplo completo de entrada y salida
#include <stdio.h>
int main() {
int edad;
float altura;
char inicial;
printf("Ingrese su edad: ");
scanf("%d", &edad);
printf("Ingrese su altura: ");
scanf("%f", &altura);
printf("Ingrese la inicial de su nombre: ");
scanf(" %c", &inicial);
printf("Edad: %d\n", edad);
printf("Altura: %f\n", altura);
printf("Inicial: %c\n", inicial);
return 0;
}
Este programa:
- recibe datos del usuario
- los guarda en variables
- luego los muestra en pantalla
Ahí ya ves claramente cómo se conectan las lecciones:
- primero aprendiste variables
- ahora ves cómo cargarlas y cómo mostrar su contenido
Errores comunes al empezar
1. Olvidar incluir stdio.h
Si usás printf o scanf, necesitás:
#include <stdio.h>
2. Olvidar el punto y coma
printf("Hola")
Eso está mal. En C, la sentencia debe terminar con ;.
Correcto:
printf("Hola");
3. Usar mal el especificador de formato
Esto está mal:
int edad = 18;
printf("%f\n", edad);
¿Por qué? Porque edad es int, y %f se usa para float.
Lo correcto sería:
printf("%d\n", edad);
4. Olvidar & en scanf
Esto está mal:
scanf("%d", edad);
Lo correcto es:
scanf("%d", &edad);
5. Querer leer texto completo antes de tiempo
Muchos principiantes quieren pasar enseguida a nombres completos o frases.
Pero eso conviene verlo con calma más adelante, cuando aparezca la lección de cadenas de caracteres.
En esta etapa, lo importante es dominar bien la entrada y salida de:
- enteros
- decimales
- caracteres
Resumen
- la salida permite que el programa muestre información
- la entrada permite que el programa reciba información
printf()se usa para mostrar texto y valores en pantallascanf()se usa para leer datos simples ingresados por el usuario%d,%fy%cson especificadores fundamentales al comenzar- en
scanf(), normalmente aparece&antes de la variable - entrada y salida conectan al programa con quien lo usa
Idea final
Cuando un programa puede mostrar y recibir datos, deja de ser una secuencia cerrada de instrucciones y empieza a convertirse en una herramienta interactiva.
Y eso es un paso enorme.
Porque programar no es solo guardar cosas en memoria: también es poder comunicarse con el usuario de forma clara.