El bucle while de C++, explicado

Respuesta corta: un bucle while repite su cuerpo mientras una condición es verdadera, y la comprueba antes de cada pasada. Es el bucle para «aún no sé cuántas veces» — todo lo demás es un for disfrazado.

Un bucle while tiene tres piezas, y solo la primera forma parte de la sintaxis:

  1. Condición — se comprueba antes de cada pasada; si es falsa, el bucle termina.
  2. Cuerpo — el trabajo.
  3. Actualización — algo dentro del cuerpo debe hacer que la condición deje de cumplirse. Si lo olvidas, tienes un bucle infinito.

Cuenta atrás: el ejemplo mínimo

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    while (n > 0) {
        cout << n << " ";
        n--;               // la actualización — quítala y el bucle no termina
    }
    cout << endl;
    return 0;
}

Donde while brilla (1): desmenuzar un número en dígitos

Cuando no sabes cuántos dígitos tiene un número, un for resulta incómodo y un while es lo natural. Este ejemplo suma los dígitos de 12345 (el patrón que hay detrás de nuestro problema de práctica Suma de los dígitos):

#include <iostream>
using namespace std;

int main() {
    int n = 12345;
    int sum = 0;
    while (n > 0) {
        sum += n % 10;   // último dígito
        n /= 10;         // lo elimina — mira por qué 12345/10 es 1234 en nuestra
                         // guía de división entera
    }
    cout << sum << endl; // 15
    return 0;
}

Donde while brilla (2): leer hasta un centinela

Lee números hasta que el usuario escriba 0. La cantidad es desconocida — ese es territorio de while (los números van en el campo de entrada):

#include <iostream>
using namespace std;

int main() {
    int x, sum = 0;
    cin >> x;
    while (x != 0) {
        sum += x;
        cin >> x;        // vuelve a leer DENTRO del bucle
    }
    cout << "sum = " << sum << endl;
    return 0;
}

Una variante más elegante actúa directamente sobre la propia lectura — cin >> x se evalúa como el flujo, que se convierte en verdadero mientras las lecturas siguen funcionando, así que el bucle termina al final de la entrada o cuando una lectura falla:

#include <iostream>
using namespace std;

int main() {
    int x, sum = 0;
    while (cin >> x) {   // repite mientras la lectura tiene éxito
        sum += x;
    }
    cout << "sum = " << sum << endl;
    return 0;
}

Anatomía de un bucle infinito

int n = 5;
while (n > 0) {
    cout << n << " ";
    // olvidaste n--;   → la condición nunca se vuelve falsa
}

Tres causas clásicas: no actualizar nada, una actualización que se salta la salida (n-- desde 5 con la condición n == 0) y una lectura que ocurre fuera del bucle. En este sitio, un bucle desbocado congela la pestaña del navegador (el código se ejecuta en tu dispositivo) — así que revisa dos veces la línea de actualización antes de pulsar Ejecutar. Una sentencia break; es una salida de emergencia, pero un bucle del que solo puedes salir con break suele indicar un mal diseño.

Errores habituales de principiante

Preguntas de entrevista sobre while

  1. «¿Cuándo eliges while en lugar de for?» — cuando el número de iteraciones se desconoce de antemano: lecturas con centinela, procesamiento de dígitos, esperar una condición.
  2. «¿Qué significa while (cin >> x)?» — el flujo se convierte en verdadero mientras las lecturas tienen éxito; el bucle termina al final de la entrada o con una entrada inválida.
  3. «¿Diferencia entre while y do-while?» — do-while comprueba la condición después del cuerpo, así que siempre se ejecuta al menos una vez (menús, validación de entrada).
  4. «¿Cómo depurarías un bucle infinito?» — imprime las variables del bucle en cada pasada; la variable que nunca cambia es la actualización que te falta.

Ponlo en práctica

Estos problemas de nuestra sección de práctica son territorio de bucles while: Contar dígitos, Suma de los dígitos, ¿Es primo?. Y la pieza que los acompaña: for vs while, lado a lado.