do-while loop
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
|
(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
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
|