Café y Código
⚡ C++ Básico· Lección 3

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):

std::cout << (Salida Estándar)

Las flechas << apuntan hacia la izquierda: estás empujando caracteres desde tus variables hacia el objeto cout para que aparezcan en pantalla.

std::cin >> (Entrada Estándar)

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:

lectura_basica.cpp
CPP
1#include <iostream>
2
3int main() {
4 int edad;
5 double estatura;
6
7 std::cout << "Ingresa tu edad: ";
8 std::cin >> edad;
9
10 std::cout << "Ingresa tu estatura en metros (ej. 1.75): ";
11 std::cin >> estatura;
12
13 std::cout << "Tienes " << edad << " años y mides " << estatura << " m.\n";
14 return 0;
15}
⚠️ El Límite de `cin >>` con Palabras

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.

MomentoLo que teclea el usuarioLo que lee C++Lo que queda atrapado en el Buffer
cin >> id;101 + [ENTER]Lee el 101El 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:

lectura_limpia.cpp
CPP
1#include <iostream>
2#include <string>
3
4int main() {
5 int id;
6 std::string nombreCompleto;
7
8 std::cout << "Ingresa tu ID numérico: ";
9 std::cin >> id;
10
11 // 🧹 Limpiamos el buffer del teclado:
12 std::cin.ignore();
13
14 std::cout << "Ingresa tu nombre y apellido: ";
15 std::getline(std::cin, nombreCompleto);
16
17 std::cout << "Registro exitoso: [" << id << "] " << nombreCompleto << "\n";
18 return 0;
19}

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
CPP
1#include <iostream>
2#include <string>
3
4int main() {
5 int telefono;
6 std::string nombre;
7
8 std::cout << "Teléfono: ";
9 std::cin >> telefono;
10
11 std::cin.ignore(); // Limpiar el buffer
12
13 std::cout << "Nombre completo: ";
14 std::getline(std::cin, nombre);
15
16 std::cout << "Contacto guardado: " << nombre << " -> Tel: " << telefono << "\n";
17 return 0;
18}
Autoevaluación Formativa

Comprueba lo que Has Aprendido 🧠

Valida tu comprensión de flujos de entrada/salida y limpieza del buffer en C++.

Dato curioso: C++ apareció en 1985; Bjarne Stroustrup en Bell Labs. Wikipedia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.