Namespaces
Variants

do-while loop

From cppreference.net

Ejecuta una statement repetidamente hasta que el valor de la expression de condición se vuelve falso. La prueba tiene lugar después de cada iteración.

Contenidos

Sintaxis

attr-spec-seq  (opcional) do statement while ( expression ) ;
attr-spec-seq - (C23) una lista opcional de atributos , aplicados a la sentencia del bucle.
statement - cualquier sentencia , típicamente una sentencia compuesta, que es el cuerpo del bucle.
expression - cualquier expresión de tipo escalar . Esta expresión se evalúa después de cada iteración, y si se compara igual a cero, se sale del bucle.

Explicación

Una do - while hace que la statement (también llamada cuerpo del bucle ) se ejecute repetidamente hasta que la expression (también llamada expresión de control ) sea igual a 0 . La repetición ocurre independientemente de si el cuerpo del bucle se ingresa normalmente o mediante un goto hacia el medio de la statement .

La evaluación de la expresión tiene lugar después de cada ejecución de la sentencia (ya sea ingresada normalmente o mediante un goto ). Si la expresión de control necesita ser evaluada antes del cuerpo del bucle, puede utilizarse el bucle while o el bucle for .

Si la ejecución del bucle necesita terminarse en algún punto, la sentencia break puede usarse como sentencia de terminación.

Si la ejecución del bucle necesita continuar al final del cuerpo del bucle, la sentencia continue puede utilizarse como atajo.

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

Al igual que todas las demás sentencias de selección e iteración, la sentencia do-while establece un ámbito de bloque : cualquier identificador introducido en la expresión sale del ámbito después de la sentencia.

(desde C99)

Notas

Las expresiones booleanas y de puntero se utilizan a menudo como expresiones de control de bucles. El valor booleano false y el valor de puntero nulo de cualquier tipo de puntero se comparan igual a cero.

Palabras clave

do , while

Ejemplo

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // ejemplo trivial
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // el cuerpo del bucle es una única sentencia de expresión
    while(n < SIZE);
    puts("Array filled!");
    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 se utiliza
    // porque siempre hay al menos un dígito que generar
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // obtener siguiente dígito en orden inverso
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

Salida posible:

Array filled!
1 0 1 1 1 1 0 0
4321

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 6.8.6.3 La sentencia do (p: 156)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 6.8.5.2 La sentencia do (p: 109)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 6.8.5.2 La sentencia do (p: 151)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 6.8.5.2 La sentencia do (p: 136)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 3.6.5.2 La sentencia do

Véase también

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