Bucles While y Do-While en C++: Dominando la Repetición en Tu Código
Bucles While y Do-While en C++ – Dominando la Repetición en Tu Código
Esta guía explica los bucles while y do-while en C++ con ejemplos claros, diagramas de flujo y consejos de mejores prácticas.
Los bucles son una piedra angular de la programación eficiente: te permiten ejecutar un bloque de código repetidamente sin duplicar líneas. Ya sea iterando sobre un rango o esperando entrada del usuario, elegir el tipo de bucle correcto es crucial para código legible y mantenible.
En C++ hay tres constructos de bucle principales:
- Bucle
for– ideal cuando el número de iteraciones se conoce de antemano. - Bucle
while– se ejecuta mientras una condición permanezca verdadera. - Bucle
do…while– garantiza al menos una ejecución antes de probar la condición.
Mientras que el bucle for se cubrió en un tutorial anterior, este artículo se centra en los bucles while y do…while, detallando sintaxis, flujo de ejecución, trampas comunes y casos de uso reales.
Bucle While en C++
La sintaxis de un bucle while es sencilla:
while (condición) { // cuerpo del bucle }
El bucle evalúa condición antes de cada iteración:
- Si
condiciónestrue, el cuerpo del bucle se ejecuta. - La condición se reevalúa después de que el cuerpo completa.
- El proceso se repite hasta que
condiciónse vuelvefalse, momento en el que el bucle sale.
Para una visión más profunda de los operadores relacionales y lógicos de C++, consulta la guía Operadores Relacionales y Lógicos en C++.
Diagrama de Flujo de un Bucle While

Ejemplo 1: Mostrar Números del 1 al 5
// Programa en C++ para imprimir números del 1 al 5 #include <iostream> using namespace std; int main() { int i = 1; // bucle while del 1 al 5 while (i <= 5) { cout << i << " "; ++i; } return 0; }
Salida
1 2 3 4 5
A continuación se muestra un desglose paso a paso de la ejecución del programa:
| Iteración | Variable | i <= 5 | Acción |
|---|---|---|---|
| 1ª | i = 1 | true | 1 impreso, i se vuelve 2 |
| 2ª | i = 2 | true | 2 impreso, i se vuelve 3 |
| 3ª | i = 3 | true | 3 impreso, i se vuelve 4 |
| 4ª | i = 4 | true | 4 impreso, i se vuelve 5 |
| 5ª | i = 5 | true | 5 impreso, i se vuelve 6 |
| 6ª | i = 6 | false | El bucle termina |
Ejemplo 2: Suma Solo de Números Positivos
// programa para hallar la suma de números positivos // si el usuario ingresa un número negativo, el bucle termina // el número negativo ingresado no se suma a la suma #include <iostream> using namespace std; int main() { int número; int suma = 0; // tomar entrada del usuario cout << "Ingresa un número: "; cin >> número; while (número >= 0) { // sumar todos los números positivos suma += número; // tomar entrada de nuevo si el número es positivo cout << "Ingresa un número: "; cin >> número; } // mostrar la suma cout << "\nLa suma es " << suma << endl; return 0; }
Salida
Ingresa un número: 6 Ingresa un número: 12 Ingresa un número: 7 Ingresa un número: 0 Ingresa un número: -2 La suma es 25
En este ejemplo, el programa sigue pidiendo números al usuario. Mientras el número ingresado sea no negativo, se suma a suma. Una entrada negativa señala el fin del bucle, y se muestra la suma final.
Bucle do…while en C++
El bucle do…while difiere de while al ejecutar su cuerpo al menos una vez antes de evaluar la condición. Esto es útil cuando el cuerpo del bucle debe ejecutarse antes de que se pueda verificar la condición de salida.
Su sintaxis es:
do { // cuerpo del bucle } while (condición);
Flujo de ejecución:
- El cuerpo se ejecuta.
- Se evalúa la condición.
- Si
true, el cuerpo se repite. - El proceso continúa hasta que la condición se vuelve
false.
Diagrama de Flujo de un Bucle do…while

Ejemplo 3: Mostrar Números del 1 al 5
// Programa en C++ para imprimir números del 1 al 5 #include <iostream> using namespace std; int main() { int i = 1; // bucle do…while del 1 al 5 do { cout << i << " "; ++i; } while (i <= 5); return 0; }
Salida
1 2 3 4 5
Pasos de ejecución:
| Iteración | Variable | i <= 5 | Acción |
|---|---|---|---|
| Inicial | i = 1 | No verificada aún | 1 impreso, i se vuelve 2 |
| 1ª | i = 2 | true | 2 impreso, i se vuelve 3 |
| 2ª | i = 3 | true | 3 impreso, i se vuelve 4 |
| 3ª | i = 4 | true | 4 impreso, i se vuelve 5 |
| 4ª | i = 5 | true | 5 impreso, i se vuelve 6 |
| 5ª | i = 6 | false | El bucle termina |
Ejemplo 4: Suma Solo de Números Positivos
// programa para hallar la suma de números positivos // Si el usuario ingresa un número negativo, el bucle termina // el número negativo ingresado no se suma a la suma #include <iostream> using namespace std; int main() { int número = 0; int suma = 0; do { suma += número; // tomar entrada del usuario cout << "Ingresa un número: "; cin >> número; } while (número >= 0); // mostrar la suma cout << "\nLa suma es " << suma << endl; return 0; }
Salida 1
Ingresa un número: 6 Ingresa un número: 12 Ingresa un número: 7 Ingresa un número: 0 Ingresa un número: -2 La suma es 25
Salida 2
Ingresa un número: -6 La suma es 0.
Cuando la primera entrada es negativa, el bucle se ejecuta una vez y sale inmediatamente, dejando suma sin cambios.
Bucles Infinitos
Un bucle infinito ocurre cuando la condición del bucle nunca evalúa a false. Esto puede suceder intencionalmente (p. ej., un servidor que se ejecuta para siempre) o accidentalmente (errores lógicos).
// bucle while infinito while (true) { // cuerpo del bucle }
De manera similar, un bucle do…while puede ser infinito:
int cuenta = 1; do { // cuerpo del bucle } while (cuenta == 1);
Tales bucles consumen recursos hasta que el programa se termina o el sistema se queda sin memoria.
Bucles for vs while
El bucle for es más adecuado cuando el conteo de iteraciones se conoce de antemano:
// bucle iterado 5 veces for (int i = 1; i <= 5; ++i) { // cuerpo del bucle }
En contraste, los bucles while y do…while son ideales cuando el número de iteraciones depende de datos en tiempo de ejecución, como entrada del usuario o el resultado de una condición compleja.
Explora más ejemplos de bucles en C++:
- Programa en C++ para Mostrar Serie de Fibonacci
- Programa en C++ para Hallar MCD
- Programa en C++ para Hallar MCM
Lenguaje C
- Dominando la lógica condicional en C#: If, If-Else, If-ElseIf y sentencias If anidadas
- Clases y Objetos en C++: Guía Práctica de Programación Orientada a Objetos
- Dominando la gestión de memoria en C++: uso experto de new y delete
- Herencia en C++: public, protected y private explicados
- Funciones y clases amigas en C++: dominando el control de acceso
- Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
- Bucles While vs. Do-While: Comparación clara con ejemplos prácticos
- Guía Completa de Fecha y Hora en C++
- Dominando la Sobrecarga en C++: Funciones y Operadores Explicados
- Dominando Entrada/Salida de Archivos en C++: Lectura y Escritura con fstream
- Comprobador de Números Palíndromos en Java: Algoritmos con Bucles While y For