2.05 · Repetitivas: `do-while` (postcondición)
🎯 Objetivo de aprendizaje
Al terminar este tema vas a poder:
- Explicar la diferencia entre precondición (while) y postcondición (do-while).
- Escribir bucles do-while que ejecuten el cuerpo AL MENOS una vez.
- Aplicar do-while a menús interactivos profesionales.
- Decidir cuándo usar while vs do-while según el problema.
- Combinar do-while con switch para construir interfaces de consola robustas.
- Validar entradas con do-while cuando la primera lectura siempre se ejecuta.
Este es el bucle "perezoso al revés": ejecuta primero, pregunta después. Es el bucle natural para menús y para reintentos donde sabes que la primera vez se ejecuta.
🧠 Teoría y conceptos — 2.5.1 — La diferencia entre while y do-while

La diferencia clave
Mnemotécnica: while = "mientras" (primero pienso, luego hago). do-while = "hazlo, luego piensa si sigues".
Cuándo importa la diferencia
- Menú interactivo: el menú DEBE mostrarse al menos una vez. → do-while.
- Validación con reintentos: el usuario DEBE intentar al menos una vez. → do-while (alternativa a while con priming read).
- Búsqueda de un número: el usuario PUEDE no tener el número. → while.
- Suma hasta el centinela: el usuario PUEDE no ingresar datos. → while.
3 ejemplos de tu vida donde haces algo AL MENOS una vez antes de decidir si sigues (esos serían `do-while`).
2.5.2 — Sintaxis, semántica, flujo

Sintaxis en C++
do {
// cuerpo del bucle
// ...
} while (condición); // ← OJO: el punto y coma al final es OBLIGATORIO
Diferencias con `while`:
- La condición va al final, después de la llave de cierre.
- Hay un punto y coma (;) después del paréntesis de la condición.
- El cuerpo va entre do { y } while, no entre while { y }.
Cómo funciona
- Se ejecuta el cuerpo (sin evaluar nada antes).
- Al terminar, se evalúa la condición.
- Si es verdadera, vuelve al paso 1.
- Si es falsa, el bucle termina.
Clave: el cuerpo se ejecuta al menos una vez, sin importar la condición.
Diagrama de flujo clásico del do-while
┌─────────────┐
│ INICIO │ ⬭
└──────┬──────┘
│
▼
╱─────────────╲
║ CUERPO ║ ▭ (se ejecuta PRIMERO)
║ (mostrar menú, ║
║ leer datos) ║
╲ ╱
╲─────────────╱
│
▼
◆─────────────◆ ◇ (postcondición)
╱ ╲
¿condición? No ─────►
──────── │
│ │ │
Sí │ │ No │
│ │ │
│ └────────────┼──► (sale del bucle)
│ │
└─────────┐ │
│ │
▼ │
(vuelve al │
cuerpo) │
▼
┌─────────────┐
│ [después │ ▭
│ del bucle] │
└──────┬──────┘
│
▼
┌─────────────┐
│ FIN │ ⬭
└─────────────┘
Lo que muestra el diagrama: el cuerpo se ejecuta PRIMERO, ANTES del rombo. La flecha "Sí" del rombo vuelve al cuerpo, no al inicio. La flecha "No" sale y continúa con lo que sigue al bucle. Esto es lo opuesto al `while` (donde el rombo va antes del cuerpo).
Ejemplo: menú simple
#include <iostream>
using namespace std;
int main() {
int opcion;
do {
cout << "\n=== Menú ===" << endl;
cout << "1. Saludar" << endl;
cout << "2. Despedirse" << endl;
cout << "3. Salir" << endl;
cout << "Opción: ";
cin >> opcion;
switch (opcion) {
case 1: cout << "¡Hola!" << endl; break;
case 2: cout << "¡Adiós!" << endl; break;
case 3: cout << "Saliendo..." << endl; break;
default: cout << "Opción inválida" << endl; break;
}
} while (opcion != 3);
cout << "Programa terminado." << endl;
return 0;
}
este mismo programa, pero con `while`. Necesitarías un priming read. ¿Cuál versión es más limpia? ¿Por qué?
2.5.3 — Cuándo usar do-while (y cuándo NO)

Usa do-while cuando:
✅ El cuerpo DEBE ejecutarse al menos una vez (menús, validaciones con reintento obligatorio). ✅ Es más natural leer la entrada PRIMERO y validar DESPUÉS. ✅ Quieres evitar el priming read.
NO uses do-while cuando:
❌ El cuerpo PUEDE no ejecutarse nunca (búsqueda, suma condicional). ❌ La condición es compleja y necesita ser visible desde el principio. ❌ Estás trabajando con Python (no tiene do-while nativo, se simula con while True + break).
Equivalente en Python (no tiene do-while)
Python no tiene do-while, pero se simula con while True + break:
while True:
print("=== Menú ===")
opcion = int(input("Opción: "))
if opcion == 3:
break # Sale del bucle
# ... procesar
Tabla comparativa final
2.5.4 — El patrón menú con do-while + switch

El patrón definitivo para menús interactivos
Ya vimos esto en el Tema 2.2. Ahora con do-while queda más limpio que while + priming read.
int opcion;
do {
cout << "\n=== MENÚ PRINCIPAL ===" << endl;
cout << "1. Opción A" << endl;
cout << "2. Opción B" << endl;
cout << "3. Salir" << endl;
cout << "Opción: ";
cin >> opcion;
switch (opcion) {
case 1: /* ... */ break;
case 2: /* ... */ break;
case 3: cout << "Adiós" << endl; break;
default: cout << "Inválida" << endl; break;
}
} while (opcion != 3);
Validación con reintento usando do-while
int edad;
do {
cout << "Ingresa tu edad (0-150): ";
cin >> edad;
if (edad < 0 || edad > 150) {
cout << "Edad inválida." << endl;
}
} while (edad < 0 || edad > 150);
**Versus `while` con priming read:** ```cpp int edad; cin >> edad; // priming read while (edad < 0 || edad > 150) { cout << "Inválida, intenta de nuevo: "; cin >> edad; } ``` Ambas son correctas. `do-while` es más natural para "pedir hasta que sea válido".
el patrón `do-while + switch` para menús. Memorízalo: vas a usarlo en cualquier programa interactivo.
🤖 IA como copiloto — 🤖 AI Mission 2.5
Prompt 1: "Te voy a pegar un while que usa priming read. NO me lo conviertas. Solo dime: (1) qué hace, (2) si se puede convertir a do-while, (3) qué ventajas tendría. Máximo 100 palabras."
Prompt 2: "Estoy construyendo un menú en C++ que se repite hasta que el usuario elija 'Salir'. Dame la estructura con do-while + switch y 3 opciones. No me corrijas nada, solo escribe el código. Máximo 150 palabras."
🧪 Laboratorio — 🧪 LAB 2.5 — 5 ejercicios con do-while
🛠️ Herramienta recomendada para los diagramas de flujo de este LAB: Para los ejercicios que pidan un diagrama de flujo, usa [draw.io (diagrams.net)](https://app.diagrams.net/) — herramienta gratis, sin registro, que funciona en el navegador. Tiene plantillas con la simbología ANSI/ISO lista (en `General → Flowchart`). Exporta tus diagramas como PNG e insértalos en tu cuaderno digital o entrégalos junto con el código. Otras opciones libres: - [Mermaid](https://mermaid.live/) — diagramas desde código Markdown. Ideal para Git. - [Excalidraw](https://excalidraw.com/) — estilo "dibujado a mano", muy intuitivo. - Dibujar a mano en tu cuaderno — siempre válido, especialmente para trazar el razonamiento.
Ejercicio 1 — Menú simple (básico, 15 min)
Enunciado. Crea un menú con 3 opciones (Saludar, Despedirse, Salir) usando do-while + switch. El menú se repite hasta elegir "Salir".
Rúbrica (10 pts): menú funcional (4 pts) + switch (3 pts) + repetición correcta (3 pts).
Ejercicio 2 — Validación de edad (básico, 15 min)
Enunciado. Crea un programa que pida la edad usando do-while. Si está fuera de [0, 150], vuelve a pedir. Al final, muestra un mensaje según la edad.
Rúbrica (10 pts): validación con do-while (5 pts) + clasificación (3 pts) + mensajes (2 pts).
Ejercicio 3 — Calculadora con menú (intermedio, 25 min)
Enunciado. Construye una calculadora con menú: sumar, restar, multiplicar, dividir, potencia (a^b), salir. Usa do-while + switch. Valida división entre 0.
Rúbrica (10 pts): menú (2 pts) + 5 operaciones (5 pts) + validación (2 pts) + repetición (1 pt).
Ejercicio 4 — Login con reintentos (intermedio, 25 min)
Enunciado. Crea un sistema de login con do-while que pida usuario y contraseña hasta 3 intentos. Si la contraseña es correcta, sale del bucle con éxito. Si se acaban los intentos, muestra "Cuenta bloqueada".
Rúbrica (10 pts): do-while con reintentos (4 pts) + validación (3 pts) + mensajes (2 pts) + salida correcta (1 pt).
Ejercicio 5 — Cajero automático (avanzado, 30 min)
Enunciado. Crea un cajero con menú: consultar saldo, depositar, retirar, salir. Saldo inicial $1000. Valida saldo insuficiente. Usa do-while para que el menú se muestre al menos una vez.
Rúbrica (10 pts): menú con do-while (3 pts) + 4 opciones (4 pts) + validaciones (2 pts) + saldo correcto (1 pt).
🎯 Cierre del tema
Lo que aprendiste hoy:
- La diferencia entre precondición y postcondición.
- Sintaxis y semántica del do-while.
- Cuándo usar do-while vs while.
- El patrón do-while + switch para menús.
- Validación con reintentos usando do-while.
Lo que sigue: en el Tema 2.6 — `for` (7h), vas a aprender el bucle más usado en programación: el for. Con él, puedes repetir un número EXACTO de veces sin preocuparte por la inicialización, condición y actualización separadas. Es el bucle "para i desde 1 hasta N".
XP obtenida al completar este tema: 100 base + 20 por LAB + 20 por Quest = 140 XP.
*"Un menú sin `do-while` es un menú que puede no abrirse. Un menú con `do-while` siempre abre."* — De la introducción de este manual.
Fin del Tema 2.5
📝 Quest · Cuestionario — 📝 Quest — Reactivos para autoevaluación
Las siguientes preguntas te sirven para autoevaluarte después de leer el tema. Responde en tu cuaderno o mentalmente, y luego revisa las Respuestas modelo (disponibles en libre acceso, sin iniciar sesión).
Sección A · Opción múltiple
Elige la opción correcta (A, B, C o D). Las respuestas están en la sección Respuestas modelo.
- ¿Cuál es la diferencia entre while y do-while?
- Son iguales
- do-while evalúa al final, ejecuta al menos una vez
- do-while es más rápido
- do-while no usa condición
- ¿Cuándo es útil do-while?
- Nunca
- Cuando necesitas que se ejecute al menos una vez
- Solo en C++
- Solo con arrays
- Sintaxis de do-while:
- do { } while (cond);
- do { } while cond;
- do { } while (cond)
- while (cond) do { }
- Si el usuario debe escribir "salir" para terminar, ¿qué bucle?
- for
- do-while con break
- while simple
- switch
- ¿do-while puede no tener cuerpo?
- Sí, con ;
- No, el bloque es obligatorio
- Solo con ; al final
- Solo en JS
- ¿Cuántas veces se ejecuta un do-while si la condición es false desde el inicio?
- 0
- 1
- 2
- infinito
- ¿do-while vs while infinito?
- Son iguales
- do-while es más seguro para menús
- while es más rápido
- do-while no compila
- ¿Qué pasa si dentro de do-while hay un continue?
- Sale
- Salta a evaluar la condición (siguiente iteración)
- Termina
- Crash
- ¿Qué pasa si dentro de do-while hay un break?
- Reinicia
- Sale del bucle
- Salta iteración
- Continúa
- do-while es ideal para:
- Recorrer arrays
- Validar entrada del usuario (al menos 1 vez)
- Sumar números
- Definir funciones
Sección B · Preguntas abiertas
Desarrolla tu respuesta en al menos 3 líneas. Compara con la respuesta modelo después de escribir.
- Diseña un menú interactivo con do-while que muestre opciones hasta que el usuario elija "salir".→ Escribe tu respuesta aquí (en tu cuaderno o mentalmente)…
- ¿Cuándo es mejor do-while que while? Da un ejemplo concreto.→ Escribe tu respuesta aquí (en tu cuaderno o mentalmente)…
- Explica la diferencia entre while(true) con break y do-while. ¿Cuál es más limpio?→ Escribe tu respuesta aquí (en tu cuaderno o mentalmente)…
🟢 Cuando termines, revisa las Respuestas modelo y compáralas con las tuyas. La mejor forma de aprender es discutir cada respuesta contigo mismo o con un compañero.