Bucle while
Ejecuta una sentencia repetidamente, hasta que el valor de expresión sea igual a cero. La comprobación se realiza antes de cada iteración.
Contenido |
[editar] Sintaxis
while ( expresión) sentencia | |||||||||
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 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 do-while.
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; while(true)
es siempre un bucle interminable.
Como con todas las demás sentencias de selección e iteración, la sentencia 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
[editar] Ejemplo
#include <stdio.h>#include <stdlib.h>#include <string.h>enum{ SIZE =8};int main(void){// un ejemplo trivialint array[SIZE], n =0;while(n < SIZE) array[n++]=rand()%2;puts("¡El arreglo esta lleno!"); n =0;while(n < SIZE)printf("%d ", array[n++]);printf("\n"); // implementación clásica de strcpy()// (copia una cadena con terminación nula de src a dst)char src[]="Hola mundo", dst[sizeof src], *p=dst, *q=src;while(*p++=*q++);// sentencia nullputs(dst);}
Salida:
¡El arreglo esta lleno! 1 0 1 1 1 1 0 0 Hola mundo
[editar] Referencias
- Standard C11 (ISO/IEC 9899:2011):
- 6.8.5.1 The while statement (p: 151)
- Standard C99 (ISO/IEC 9899:1999):
- 6.8.5.1 The while statement (p: 136)
- Standard C89/C90 (ISO/IEC 9899:1990):
- 3.6.5.1 The while statement
[editar] Véase también
Documentación de C++ para Bucle while |