while loop
Exécute une instruction de manière répétée, jusqu'à ce que la valeur de l' expression devienne égale à zéro. Le test a lieu avant chaque itération.
Table des matières |
Syntaxe
attr-spec-seq
(optionnel)
while (
expression
)
instruction
|
|||||||||
| expression | - | toute expression de type scalaire . Cette expression est évaluée avant chaque itération, et si elle est égale à zéro, la boucle est quittée. |
| statement | - | toute instruction , généralement une instruction composée, qui sert de corps à la boucle |
| attr-spec-seq | - | (C23) liste optionnelle d' attributs , appliquée à l'instruction de boucle |
Explication
Une instruction
while
provoque l'exécution répétée de l'
instruction
(également appelée
le corps de la boucle
) jusqu'à ce que l'
expression
(également appelée
expression de contrôle
) soit égale à zéro. La répétition se produit que le corps de la boucle soit atteint normalement ou via une instruction
goto
au milieu de l'
instruction
.
L'évaluation de expression a lieu avant chaque exécution de statement (sauf si on y accède par un goto). Si l'expression de contrôle doit être évaluée après le corps de la boucle, la boucle do-while peut être utilisée.
Si l'exécution de la boucle doit être interrompue à un certain moment, l' instruction break peut être utilisée comme instruction de terminaison.
Si l'exécution de la boucle doit être poursuivie à la fin du corps de la boucle, l'instruction continue peut être utilisée comme raccourci.
Un programme avec une boucle infinie a un comportement indéfini si la boucle n'a aucun comportement observable (E/S, accès volatiles, opérations atomiques ou de synchronisation) dans aucune partie de son instruction ou expression . Cela permet aux compilateurs d'optimiser toutes les boucles non observables sans prouver qu'elles se terminent. Les seules exceptions sont les boucles où l' expression est une expression constante ; while ( true ) est toujours une boucle infinie.
|
Comme pour toutes les autres instructions de sélection et d'itération, l'instruction while établit une portée de bloc : tout identifiant introduit dans l' expression sort de la portée après l' instruction . |
(depuis C99) |
Notes
Les expressions booléennes et les pointeurs sont souvent utilisées comme expressions de contrôle de boucle. La valeur booléenne
false
et la valeur de pointeur nul de tout type de pointeur sont égales à zéro.
Mots-clés
Exemple
#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); }
Sortie :
Array filled! 1 0 1 1 1 1 0 0 Hello, world
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.8.5.1 L'instruction while (p: 109)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 6.8.5.1 L'instruction while (p: 151)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 6.8.5.1 L'instruction while (p: 136)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 3.6.5.1 L'instruction while
Voir aussi
|
Documentation C++
pour
while
loop
|