Espacios de nombres
Variantes
Acciones

Bucle do-while

De cppreference.com
< c‎ | language

Ejecuta una sentencia repetidamente, hasta que el valor de expresión sea falsa. La comprobación se realiza despues de cada iteración.

Contenido

[editar] Sintaxis

do sentencia while ( expresión ) ;
expresión - cualquier expresión de tipo escalar. Esta expresión se comprueba antes de cada iteración, y si es igual a cero, se sale del bucle.
sentencia - cualquier sentencia, típicamente una sentencia compuesta, que sirve como el cuerpo del bucle

[editar] Explicación

Una sentencia do-while hace que la sentencia (también llamada cuerpo del bucle) se ejecute repetidamente hasta que la expresión (también llamada expresión de control) se iguale a cero. La repetición se produce independientemente de si el cuerpo del bucle se introduce normalmente o por medio de un goto en el medio de la sentencia.

La evaluación de la expresión tiene lugar antes de cada ejecución de la sentencia (a menos que se introduzca mediante un goto). Si la expresión de control necesita ser evaluada después del cuerpo del bucle, se puede usar un bucle while o un bucle for.

Si la ejecución del bucle necesita ser terminada en algún momento, se puede usar la sentencia break como una expresión de terminación.

Si la ejecución del bucle necesita continuar al final del cuerpo del bucle, se puede utilizar la sentencia continue como acceso directo.

Un programa con un bucle interminable tiene un comportamiento indefinido si el bucle no tiene un comportamiento observable (E/S, accesos volátiles, operación atómica o de sincronización) en cualquier parte de su sentencia or expresión. Esto permite a los compiladores optimizar todos los bucles no observables sin probar que terminan. Las únicas excepciones son los bucles en los que expresión es una expresión constante; do {...} while(true); es siempre un bucle interminable.

Como con todas las demás sentencias de selección e iteración, la sentencia do-while establece un alcance en bloque: cualquier identificador introducido en la expresión sale fuera de alcance después de la sentencia.

(desde C99)

[editar] Observaciones

Las expresiones booleanas y de puntero se utilizan a menudo como expresiones de control de bucle. El valor booleano false y el valor del puntero null de cualquier tipo de puntero se asemejan a cero.

[editar] Terminos Clave

do, while

[editar] Ejemplo

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // un ejemplo trivial
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // el cuerpo del bucle es una sentencia de expresión única
    while(n < SIZE);
    puts("¡El arreglo esta lleno!");
    n = 0;
    do { // el cuerpo del bucle es una sentencia compuesta
        printf("%d ", array[n]);
        ++n;
    } while (n < SIZE);
    printf("\n");
 
    // el bucle de K&R itoa(). El bucle do-while es utilizado
    // porque siempre hay al menos un dígito que generar
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // obtiene el siguiente dígito en orden inverso
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

Posible salida:

¡El arreglo esta lleno!
1 0 1 1 1 1 0 0
4321

[editar] Referencias

  • Standard C11 (ISO/IEC 9899:2011):
  • 6.8.5.2 The do statement (p: 151)
  • Standard C99 (ISO/IEC 9899:1999):
  • 6.8.5.2 The do statement (p: 136)
  • Standard C89/C90 (ISO/IEC 9899:1990):
  • 3.6.5.2 The do statement

[editar] Véase también

Documentación de C++ para Bucle do-while