while loop
Ejecuta una statement repetidamente, hasta que el valor de la expression se iguale a cero. La prueba tiene lugar antes de cada iteración.
Contenidos |
Sintaxis
attr-spec-seq
(opcional)
while (
expresión
)
sentencia
|
|||||||||
| expression | - | cualquier expresión de tipo escalar . Esta expresión se evalúa antes de cada iteración, y si se compara igual a cero, se sale del bucle. |
| statement | - | cualquier sentencia , típicamente una sentencia compuesta, que sirve como cuerpo del bucle |
| attr-spec-seq | - | (C23) lista opcional de atributos , aplicados a la sentencia de bucle |
Explicación
Una
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 compare igual a cero. La repetición ocurre independientemente de si el cuerpo del bucle se ingresa normalmente o mediante un
goto
hacia el medio de la
sentencia
.
La evaluación de expression tiene lugar antes de cada ejecución de statement (a menos que se ingrese mediante un goto). Si la expresión de control necesita ser evaluada después del cuerpo del bucle, puede utilizarse el bucle do-while .
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 statement o expression . Esto permite a los compiladores optimizar todos los bucles no observables sin probar que terminan. Las únicas excepciones son los bucles donde la expression es una expresión constante; while ( true ) siempre es un bucle infinito.
|
Al igual que todas las demás sentencias de selección e iteración, la sentencia while establece á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
Ejemplo
#include <stdio.h> #include <stdlib.h> #include <string.h> enum { SIZE = 8 }; int main(void) { // trivial example int array[SIZE], n = 0; while(n < SIZE) array[n++] = rand() % 2; puts("Array filled!"); n = 0; while(n < SIZE) printf("%d ", array[n++]); printf("\n"); // classic strcpy() implementation // (copies a null-terminated string from src to dst) char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src; while((*p++ = *q++)) // double parentheses (that are not strictly necessary) // used to suppress warnings, ensuring that this is an // assignment (as opposed to a comparison) by intention, // whose result is used as a truth value ; // null statement puts(dst); }
Salida:
Array filled! 1 0 1 1 1 1 0 0 Hello, world
Referencias
- Estándar C17 (ISO/IEC 9899:2018):
-
- 6.8.5.1 La sentencia while (p: 109)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 6.8.5.1 La sentencia while (p: 151)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 6.8.5.1 La sentencia while (p: 136)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 3.6.5.1 La sentencia while
Véase también
|
Documentación de C++
para
while
loop
|