Los ciclos en C++ te permiten repetir un bloque de código varias veces sin tener que escribirlo de nuevo cada vez.
Imagina este problema
Tienes que imprimir los precios de 100 productos de Liverpool. Escribir 100 líneas de cout sería absurdo. Un ciclo hace ese trabajo en 5 líneas. Esa es la diferencia entre programar con inteligencia y programar con esfuerzo.
En la lección anterior aprendiste a tomar decisiones con if y switch. Ahora vas a aprender a repetir esas decisiones automáticamente.
El sistema de los dos ciclos
C++ tiene dos ciclos principales para principiantes: for y while. Cada uno tiene su caso ideal.
Piénsalos así: el for es como un contador con fecha de inicio y fecha de fin conocidas. El while es como un guardia que trabaja mientras se cumpla una condición, sin saber exactamente cuántas horas va a durar.
Usas for cuando sabes cuántas veces quieres repetir algo. Usas while cuando no sabes cuántas veces, pero sí sabes cuándo parar.
El ciclo for: repetir un número fijo de veces
Esta es la estructura del ciclo for:
for (inicio; condicion; incremento) {
// código que se repite
}
Tiene tres partes separadas por punto y coma:
- Inicio: crea la variable contadora y le da un valor inicial.
- Condición: el ciclo continúa mientras esta condición sea verdadera.
- Incremento: actualiza la variable contadora en cada repetición.
Ejemplo 1: Imprimir productos de un catálogo
Supón que tienes un sistema de inventario para una tienda como Liverpool. Quieres imprimir los números del 1 al 10 para etiquetar productos.
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
cout << "Producto #" << i << endl;
}
return 0;
}
Salida:
Producto #1
Producto #2
...
Producto #10
El ciclo empieza con i = 1. Revisa que i <= 10 sea verdadero. Ejecuta el cout. Luego suma 1 a i con i++. Repite hasta que i llega a 11 y la condición es falsa.
Ejemplo 2: Calcular el total de ventas de Bimbo
Imagina que tienes 5 días de ventas y quieres sumar el total.
#include <iostream>
using namespace std;
int main() {
int ventas[] = {3200, 4100, 2800, 5000, 3700};
int total = 0;
for (int i = 0; i < 5; i++) {
total = total + ventas[i];
}
cout << "Total de ventas: $" << total << endl;
return 0;
}
Salida:
Total de ventas: $18,800
El ciclo recorre los 5 elementos del arreglo y los va sumando uno por uno. Esto es mucho más limpio que escribir total = ventas[0] + ventas[1] + ventas[2]...
El ciclo while: repetir mientras algo sea verdadero
Esta es la estructura del ciclo while:
while (condicion) {
// código que se repite
}
El while revisa la condición antes de ejecutar el código. Si la condición es falsa desde el principio, el bloque nunca se ejecuta.
Ejemplo 3: Validar el saldo de un usuario en Mercado Libre
Imagina que un usuario tiene un saldo inicial de $500 y hace compras hasta que su saldo sea menor a $100.
#include <iostream>
using namespace std;
int main() {
int saldo = 500;
int compra = 120;
int operaciones = 0;
while (saldo >= 100) {
saldo = saldo - compra;
operaciones++;
cout << "Compra realizada. Saldo restante: $" << saldo << endl;
}
cout << "Saldo insuficiente. Operaciones realizadas: " << operaciones << endl;
return 0;
}
Salida:
Compra realizada. Saldo restante: $380
Compra realizada. Saldo restante: $260
Compra realizada. Saldo restante: $140
Compra realizada. Saldo restante: $20
Saldo insuficiente. Operaciones realizadas: 4
Aquí no sabes de antemano cuántas compras va a hacer el usuario. El while es perfecto para esto.
Ejemplo 4: Sistema de login con intentos limitados
Un sistema de recursos humanos de FEMSA da máximo 3 intentos para ingresar la contraseña correcta.
#include <iostream>
using namespace std;
int main() {
int contrasena_correcta = 1234;
int intento = 0;
int intentos_restantes = 3;
while (intentos_restantes > 0) {
cout << "Ingresa tu contraseña: ";
cin >> intento;
if (intento == contrasena_correcta) {
cout << "Acceso concedido." << endl;
break;
} else {
intentos_restantes--;
cout << "Contraseña incorrecta. Intentos restantes: " << intentos_restantes << endl;
}
}
if (intentos_restantes == 0) {
cout << "Cuenta bloqueada. Contacta a RRHH." << endl;
}
return 0;
}
Este ejemplo combina while con if y el comando break. El break sale del ciclo inmediatamente cuando la condición se cumple.
Comparación directa: for vs while
| Situación | Ciclo recomendado |
|---|---|
| Recorrer un arreglo de 10 productos | for |
| Esperar a que el usuario ingrese datos válidos | while |
| Imprimir los primeros 20 empleados de una nómina | for |
| Procesar pedidos hasta que el inventario llegue a cero | while |
| Repetir exactamente N veces | for |
| Repetir hasta que una condición cambie | while |
Errores comunes que debes evitar
1. El ciclo infinito
Este es el error más peligroso con while. Si la condición nunca se vuelve falsa, el programa nunca para.
// ¡INCORRECTO! Ciclo infinito
int contador = 1;
while (contador > 0) {
cout << contador << endl;
// Se te olvidó cambiar el valor de contador
}
Siempre verifica que algo dentro del while modifique la variable de la condición.
2. El error de uno (off-by-one)
Es cuando tu ciclo repite una vez de más o una vez de menos.
// Querías imprimir del 1 al 5, pero escribiste < en lugar de <=
for (int i = 1; i < 5; i++) {
cout << i << endl; // Solo imprime 1, 2, 3, 4
}
Revisa bien si tu condición usa < o <=. Un carácter cambia el resultado completo.
3. Modificar la variable del ciclo adentro del for
Cambiar i dentro del cuerpo de un for genera comportamiento difícil de predecir. Deja que el incremento del for controle solo la variable.
// Confuso y propenso a errores
for (int i = 0; i < 10; i++) {
i = i + 2; // No hagas esto
cout << i << endl;
}
4. Olvidar las llaves en ciclos de una sola línea
Si tu ciclo solo tiene una instrucción puedes omitir las llaves, pero es una mala práctica. Si después agregas más código, el ciclo no lo incluirá.
// Funciona, pero es peligroso al editar
for (int i = 0; i < 5; i++)
cout << i << endl;
// Mejor así, siempre con llaves
for (int i = 0; i < 5; i++) {
cout << i << endl;
}
Cómo aplicar esto en tu próximo programa
Antes de escribir un ciclo, hazte estas dos preguntas:
- ¿Sé exactamente cuántas veces necesito repetir esto? → Usa
for. - ¿Voy a repetir hasta que algo cambie, sin saber cuándo? → Usa
while.
Después verifica tres cosas en tu ciclo:
- Que la condición eventualmente se vuelva falsa.
- Que el incremento o la modificación estén en el lugar correcto.
- Que usaste
<o<=según lo que necesitas.
Los ciclos no hacen magia: hacen exactamente lo que tú les indicas, y si hay un error en la condición, lo van a repetir fielmente.