Namespaces
Variants

while loop

From cppreference.net

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

while

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