Bucle do-while
Ejecuta una sentencia repetidamente, hasta que el valor de expresión sea falsa. La comprobación se realiza despues de cada iteración.
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 |
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) |
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.
Terminos Clave
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
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
Véase también
Documentación de C++ para Bucle do-while
|