3. Entrada y Salida: Flujos y Buffer en Consola 💬
Aprende cómo fluyen los datos entre el teclado y la pantalla: operadores de inserción (<<), extracción (>>) y la solución definitiva al bug del buffer.
1. El Concepto de "Flujo" (Stream) en C++
En C++, la comunicación con el usuario se modela como un río continuo de caracteres (un flujo o stream):
Las flechas << apuntan hacia la izquierda: estás empujando caracteres desde tus variables hacia el objeto cout para que aparezcan en pantalla.
Las flechas >> apuntan hacia la derecha: estás extrayendo los caracteres tecleados por el usuario desde cin para guardarlos dentro de tu casillero de memoria.
2. Lectura Básica con std::cin
std::cin detecta automáticamente el tipo de dato que espera la variable:
std::cin >> se detiene al encontrar el primer espacio en blanco o tabulación. Si ingresas "Juan Pérez" en una variable de texto con cin >>, ¡solo guardará "Juan" y dejará "Pérez" flotando en el buffer!
3. 🚨 El "Bug Fantasma" del Buffer y cómo Resolverlo
Para leer frases completas con espacios usamos std::getline(std::cin, texto). Pero si antes usaste un cin >>, ocurrirá el error más común de los estudiantes: el programa parece saltarse el getline sin dejarte escribir.
| Momento | Lo que teclea el usuario | Lo que lee C++ | Lo que queda atrapado en el Buffer |
|---|---|---|---|
| cin >> id; | 101 + [ENTER] | Lee el 101 | El carácter salto de línea '\n' |
| getline(cin, nombre); | (Esperando escribir...) | Ve el '\n' rezagado de inmediato | ¡Cree que el usuario ingresó un texto vacío y avanza! |
La Solución Profesional: std::cin.ignore()
Basta con colocar std::cin.ignore(); justo después del cin >> para descartar ese salto de línea residual:
Ejercicio: Ficha de Contacto
Crea un programa que solicite el número de teléfono (int) y luego el nombre completo con apellido (std::string). Asegúrate de limpiar el buffer correctamente e imprime ambos datos en una sola línea de confirmación.
Ver solución
Comprueba lo que Has Aprendido 🧠
Valida tu comprensión de flujos de entrada/salida y limpieza del buffer en C++.


