Los ciclos son estructuras que repiten un bloque de código varias veces sin que tengas que escribirlo una y otra vez.
En C# existen tres ciclos principales: for, while y foreach. Cada uno tiene un uso ideal según la situación.
Sintaxis de los tres ciclos
Ciclo for
Usa for cuando sabes exactamente cuántas veces quieres repetir algo.
for (inicialización; condición; incremento)
{
// código que se repite
}
- Inicialización: crea la variable contadora, por ejemplo
int i = 0. - Condición: el ciclo continúa mientras sea
true. - Incremento: cambia la variable al final de cada vuelta, por ejemplo
i++.
Ciclo while
Usa while cuando no sabes de antemano cuántas veces se repetirá el código.
while (condición)
{
// código que se repite
}
El ciclo revisa la condición antes de ejecutar el bloque. Si la condición es false desde el inicio, el bloque nunca se ejecuta.
Ciclo foreach
Usa foreach para recorrer todos los elementos de una colección, como un arreglo o una lista.
foreach (tipo variable in colección)
{
// código que se repite
}
foreach avanza automáticamente al siguiente elemento. No necesitas manejar un contador.
Ejemplos prácticos
Ejemplo 1 — Ciclo for: imprimir números de venta
Imagina que tienes 5 vendedores en Liverpool y quieres imprimir el número de cada uno.
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("Vendedor número: " + i);
}
Salida en consola:
Vendedor número: 1
Vendedor número: 2
Vendedor número: 3
Vendedor número: 4
Vendedor número: 5
El ciclo empieza en i = 1. Continúa mientras i <= 5. Cada vuelta suma 1 con i++.
Ejemplo 2 — Ciclo for: calcular total de ventas
Tienes un arreglo con las ventas diarias de una tienda Bimbo durante una semana. Quieres sumar el total.
int[] ventas = { 12500, 9800, 15200, 11000, 13400, 8700, 16000 };
int total = 0;
for (int i = 0; i < ventas.Length; i++)
{
total = total + ventas[i];
}
Console.WriteLine("Total de ventas de la semana: $" + total);
Salida en consola:
Total de ventas de la semana: $86,600
ventas.Length regresa el número de elementos del arreglo. Así el ciclo no se pasa del límite.
Ejemplo 3 — Ciclo while: procesar pedidos pendientes
En Mercado Libre hay pedidos pendientes de procesar. El sistema procesa uno por uno hasta que no queden más.
int pedidosPendientes = 8;
while (pedidosPendientes > 0)
{
Console.WriteLine("Procesando pedido. Pendientes: " + pedidosPendientes);
pedidosPendientes--;
}
Console.WriteLine("Todos los pedidos fueron procesados.");
Salida en consola:
Procesando pedido. Pendientes: 8
Procesando pedido. Pendientes: 7
Procesando pedido. Pendientes: 6
Procesando pedido. Pendientes: 5
Procesando pedido. Pendientes: 4
Procesando pedido. Pendientes: 3
Procesando pedido. Pendientes: 2
Procesando pedido. Pendientes: 1
Todos los pedidos fueron procesados.
pedidosPendientes-- resta 1 en cada vuelta. Cuando llega a 0, la condición es false y el ciclo termina.
Ejemplo 4 — Ciclo foreach: listar productos con precio
Tienes una lista de productos de FEMSA con sus precios. Quieres mostrar cada uno en pantalla.
string[] productos = { "Coca-Cola 600ml", "Agua Ciel 1L", "Sidral Mundet 355ml" };
int[] precios = { 18, 12, 15 };
for (int i = 0; i < productos.Length; i++)
{
Console.WriteLine(productos[i] + " — $" + precios[i]);
}
Salida en consola:
Coca-Cola 600ml — $18
Agua Ciel 1L — $12
Sidral Mundet 355ml — $15
Ahora el mismo resultado usando foreach con solo los nombres de producto:
string[] productos = { "Coca-Cola 600ml", "Agua Ciel 1L", "Sidral Mundet 355ml" };
foreach (string producto in productos)
{
Console.WriteLine("Producto disponible: " + producto);
}
Salida en consola:
Producto disponible: Coca-Cola 600ml
Producto disponible: Agua Ciel 1L
Producto disponible: Sidral Mundet 355ml
foreach recorre cada string del arreglo automáticamente. No necesitas índice ni contador.
Ejemplo 5 — Ciclo foreach con cálculo: total de nómina
Tienes los salarios de cinco empleados de una empresa distribuidora. Quieres calcular el total de nómina mensual.
int[] salarios = { 18500, 22000, 15000, 28000, 19500 };
int totalNomina = 0;
foreach (int salario in salarios)
{
totalNomina = totalNomina + salario;
}
Console.WriteLine("Total de nómina mensual: $" + totalNomina);
Salida en consola:
Total de nómina mensual: $103,000
Este patrón —acumular valores con foreach— es muy común en sistemas de nómina y reportes financieros.
Tabla comparativa: ¿cuándo usar cada ciclo?
| Ciclo | Úsalo cuando… | ¿Necesita contador? |
|---|---|---|
for |
Sabes cuántas repeticiones habrá | Sí |
while |
La cantidad de repeticiones depende de una condición dinámica | Opcional |
foreach |
Quieres recorrer todos los elementos de una colección | No |
Errores comunes
Error 1 — Ciclo infinito en while
Si olvidas modificar la variable dentro del while, el ciclo nunca termina.
// ❌ Ciclo infinito — el programa se congela
int contador = 0;
while (contador < 5)
{
Console.WriteLine("Vuelta: " + contador);
// falta: contador++
}
Corrección: siempre modifica la variable que controla la condición dentro del bloque.
// ✅ Correcto
int contador = 0;
while (contador < 5)
{
Console.WriteLine("Vuelta: " + contador);
contador++;
}
Error 2 — Índice fuera de rango en for
Los arreglos en C# usan índices desde 0. Si usas <= en lugar de <, accedes a una posición que no existe.
// ❌ Error de ejecución: índice fuera de rango
string[] tiendas = { "Liverpool Perisur", "Liverpool Santa Fe", "Liverpool Insurgentes" };
for (int i = 0; i <= tiendas.Length; i++)
{
Console.WriteLine(tiendas[i]);
}
Corrección: usa i < tiendas.Length, no i <= tiendas.Length.
// ✅ Correcto
for (int i = 0; i < tiendas.Length; i++)
{
Console.WriteLine(tiendas[i]);
}
Error 3 — Modificar la colección dentro de foreach
foreach no permite modificar la colección mientras la recorre. Hacerlo genera un error en tiempo de ejecución.
// ❌ No se puede modificar la lista dentro de foreach
List<string> productos = new List<string> { "Pan Bimbo", "Marinela", "Twinkie" };
foreach (string p in productos)
{
productos.Remove(p); // Error en ejecución
}
Corrección: si necesitas modificar la colección, usa un ciclo for en reversa o crea una lista temporal.
Error 4 — Condición incorrecta desde el inicio en while
Si la condición es false desde antes de entrar al ciclo, el bloque nunca se ejecuta. Esto puede ser un bug difícil de detectar.
// ❌ El ciclo nunca se ejecuta
int pedidos = 0;
while (pedidos > 0)
{
Console.WriteLine("Procesando...");
pedidos--;
}
Revisa siempre el valor inicial de tus variables antes de escribir la condición del while.
Resumen rápido
fores ideal para repeticiones con un número conocido de vueltas.whilees ideal cuando la repetición depende de algo que cambia durante la ejecución.foreaches la opción más limpia para recorrer arreglos y listas sin manejar índices.- Todos los ciclos ejecutan su bloque entre llaves
{}y terminan cuando su condición se vuelvefalse.