Cours 6.4. Comment choisir une boucle en C ?

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 boucle for

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 boucle do..while

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 );

La boucle while

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() );

Synthèse

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.

Quiz

Pour compter de 3 à 28, j'utilise ...

Vérifier Bravo ! On sait où la boucle va commencer et s'arrêter, on utilise une boucle for. Essaie encore ...

Pour tester si un nombre est pair ou impair, j'utilise ...

Vérifier Bravo ! Pas besoin de boucle, un if est suffisant. Essaie encore ...

Pour attendre qu'un capteur change d'état, je peux utiliser ...

Vérifier Bravo ! Tout dépend si le capteur doit être lu dans le corps de la boucle ou non. Essaie encore ...

Est-ce que la boucle while est bien adapatée dans le code ci-dessous ?

scanf ("%d", &N);
while ( N<0 ) {
    scanf ("%d", &N);
}
Vérifier Bravo ! Le bloc est forcément exécuté une fois. Une boucle do..while serait mieux. Essaie encore ...

Voir aussi


Dernière mise à jour : 09/11/2022