Entrada y Salida
La comunicación con el usuario es fundamental en cualquier programa que desarrollemos. En C, las funciones printf y scanf son las herramientas básicas para mostrar información en pantalla y obtener datos del usuario.
printf: Mostrando información
La función printf (de "print formatted") permite imprimir texto y variables en la consola con un formato específico. Es el equivalente a print() en Python, con la diferencia de que requiere especificar el formato de cada dato a mostrar.
Sintaxis básica
printf("formato", argumentos);
Especificadores de formato comunes
Los especificadores le dicen a printf cómo interpretar y mostrar cada variable:
%do%i- Enteros (int)%f- Números de punto flotante (float, double)%c- Caracteres (char)
Los siguientes especificadores los vemos más adelante:
%s- Cadenas de texto (strings)%p- Punteros (direcciones de memoria)
Modificadores útiles
Se puede controlar el formato con más precisión:
printf("%5d", 42); // Ancho mínimo de 5 caracteres: " 42"
printf("%.2f", 3.14159); // 2 decimales: "3.14"
printf("%8.2f", 3.14); // 8 caracteres totales, 2 decimales: " 3.14"
Ejemplos de printf
#include <stdio.h>
int main() {
int edad = 25;
float altura = 1.75;
char inicial = 'F';
printf("Hola, mundo!\n");
printf("Tengo %d años\n", edad);
printf("Mi altura es %.2f metros\n", altura);
printf("Mi inicial es: %c\n", inicial);
printf("Todo junto: %d años, %.2f m, inicial %c\n", edad, altura, inicial);
return 0;
}
scanf: Capturando entrada del usuario
La función scanf (de "scan formatted") lee datos del teclado siguiendo un formato específico. Es el equivalente a input() en Python, con la diferencia de que es necesario especificar el tipo de dato que se espera recibir.
Sintaxis básica
scanf("formato", &variable);
Importante: el símbolo & antes de la variable es necesario para que scanf pueda modificar la variable que le pasamos. Vamos a entender cómo funciona en profundidad más adelante.
Ejemplos de scanf
#include <stdio.h>
int main() {
int edad;
float peso;
char inicial;
printf("Ingresá tu edad: ");
scanf("%d", &edad);
printf("Ingresá tu peso (kg): ");
scanf("%f", &peso);
printf("Ingresá tu inicial: ");
scanf(" %c", &inicial); // prestar atención al espacio antes de %c, es necesario para que funcione
printf("\nResumen:\n");
printf("Edad: %d años\n", edad);
printf("Peso: %.1f kg\n", peso);
printf("Inicial: %c\n", inicial);
return 0;
}
Cuidados con scanf
-
El ampersand (
&): no olvidar el&antes de variables simples (int, float, char). Los vectores son la excepción. Sin él, no es posible guardar el valor ingresado por el usuario. -
Espacios en blanco: para leer caracteres, se usa un espacio antes de
%c(sin él, se almacena el caracter junto con basura del buffer y el valor guardado no es el esperado):scanf(" %c", &caracter); -
scanfsiempre acompañado deprintf: todoscanfdebe estar precedido por un mensaje que indique qué se solicita y cómo ingresarlo.
Secuencias de escape
Caracteres especiales que se pueden usar en printf:
\n- Nueva línea\t- Tabulación\\- Barra invertida literal\"- Comillas dobles%%- Símbolo de porcentaje literal
printf("Primera línea\nSegunda línea\n");
printf("Columna1\tColumna2\tColumna3\n");
printf("El 50%% de descuento!\n");
C vs Python: Comparación práctica
Veamos cómo se comparan estas operaciones en ambos lenguajes.
Ejemplo 1: Saludar al usuario
C
#include <stdio.h>
int main() {
char nombre[50];
printf("¿Cómo te llamas? ");
scanf("%s", nombre);
printf("¡Hola, %s!\n", nombre);
return 0;
}
Python
nombre = input("¿Cómo te llamas? ")
print(f"¡Hola, {nombre}!")
Ejemplo 2: Calculadora simple
C
#include <stdio.h>
int main() {
float num1, num2, resultado;
printf("Ingresá el primer número: ");
scanf("%f", &num1);
printf("Ingresá el segundo número: ");
scanf("%f", &num2);
resultado = num1 + num2;
printf("%.2f + %.2f = %.2f\n", num1, num2, resultado);
return 0;
}
Python
num1 = float(input("Ingresá el primer número: "))
num2 = float(input("Ingresá el segundo número: "))
resultado = num1 + num2
print(f"{num1:.2f} + {num2:.2f} = {resultado:.2f}")
Ejemplo 3: Calculadora de promedios
C
#include <stdio.h>
int main() {
float nota1, nota2, nota3, promedio;
printf("=== Calculadora de Promedio ===\n");
printf("Ingresá la nota 1: ");
scanf("%f", ¬a1);
printf("Ingresá la nota 2: ");
scanf("%f", ¬a2);
printf("Ingresá la nota 3: ");
scanf("%f", ¬a3);
promedio = (nota1 + nota2 + nota3) / 3.0;
printf("\nResultados:\n");
printf("Nota 1: %.2f\n", nota1);
printf("Nota 2: %.2f\n", nota2);
printf("Nota 3: %.2f\n", nota3);
printf("Promedio: %.2f\n", promedio);
if (promedio >= 4.0) {
printf("Estado: APROBADO ✓\n");
} else {
printf("Estado: REPROBADO ✗\n");
}
return 0;
}
Python
print("=== Calculadora de Promedio ===")
nota1 = float(input("Ingresá la nota 1: "))
nota2 = float(input("Ingresá la nota 2: "))
nota3 = float(input("Ingresá la nota 3: "))
promedio = (nota1 + nota2 + nota3) / 3
print("\nResultados:")
print(f"Nota 1: {nota1:.2f}")
print(f"Nota 2: {nota2:.2f}")
print(f"Nota 3: {nota3:.2f}")
print(f"Promedio: {promedio:.2f}")
if promedio >= 4.0:
print("Estado: APROBADO ✓")
else:
print("Estado: REPROBADO ✗")
Consejos prácticos
-
Siempre incluir
<stdio.h>al usarprintfyscanf. -
No olvidar el
&conscanfpara variables simples: sin él, las variables no cambian su valor y se obtienen resultados inesperados. -
Recordar el espacio antes de
%c: es un detalle fácil de pasar por alto que genera resultados incorrectos difíciles de diagnosticar.