Il existe trois boucles en C : for, while et
do..while
. Chaque boucle a des particularités
qui la rendent plus ou moins adaptée à une tâche donnée. Les 3 boucles sont interchageables, mais
le code résultant peut être moins lisible, voire moins performant. Les développeurs expérimentés
ont pris des habitudes qui sont devenues une sorte de standard informel. C'est ce que l'on appelle les bonnes pratiques (best practices en anglais).
L'exemple ci-dessous montre trois programmes qui comptent de 0 à 100 avec un pas de 10:
i=0;
while (i<=100) {
printf ("%d ", i);
i += 10;
}
i=0;
do {
printf ("%d ", i);
i += 10;
}
while (i<=100);
printf ("\nBoucle for :\t\t");
for ( i=0 ; i<=100 ; i+=10 )
printf ("%d ", i);
La boucle for
est clairement la plus conviviale, mais aussi la plus concise.
La première question à se poser pour choisir une boucle est de savoir si la boucle for
ne serait pas
la plus adaptée. Si la réponse aux questions suivantes est oui, c'est très probablement
la boucle for
qu'il vous faut :
Si vous savez où et jusqu'où vous comptez, ainsi que le pas de comptage : pas d'hésitation c'est
une boucle for
qu'il faut utiliser.
La particularité de la boucle do..while
est de toujours exécuter le bloc d'instructions au moins une fois.
Si la boucle for
n'est pas appropriée, et que vous êtes certain d'exécuter le
corps de la boucle au moins une fois, utilisez une boucle do..while
.
Par exemple, la boucle do..while
est utilisée dans les systèmes embarqués pour attendre
le déclenchement d'un événement. Cela s'appelle en anglais event-polling :
\\ Attend un appui sur le bouton
do {
buttonPressed = readButton();
} while ( !buttonPressed );
Enfin, si les boucles for
et do..while
ne sont pas adaptées, c'est sûrement
que la meilleure option est la boucle while
. Voici un exemple de code qui attend
que l'utilisateur appuie sur une touche (kbhit
= KeyBoard HIT) :
// Attend un appui sur une touche du clavier
while ( !kbhit() );
En résumé, lorsque l'on sait où l'on commence et où on s'arrête de compter, c'est
généralement une boucle for
.
Si ce n'est pas le cas : si le bloc d'instructions doit être exécuté
au moins une fois, c'est une boucle do..while
, sinon c'est une
boucle while
.
Pour compter de 3 à 28, j'utilise ...
for
.
Essaie encore ...
Pour tester si un nombre est pair ou impair, j'utilise ...
if
est suffisant.
Essaie encore ...
Pour attendre qu'un capteur change d'état, je peux utiliser ...
Est-ce que la boucle while
est bien adapatée dans le code ci-dessous ?
scanf ("%d", &N);
while ( N<0 ) {
scanf ("%d", &N);
}
do..while
serait mieux.
Essaie encore ...