Comme pour les conditions, il y a plusieurs façons de réaliser des boucles. Nous allons voir trois types de boucles courantes en C :
while
do… while
for
Dans tous les cas, le principe est le même :
Voici ce qu'il se passe, dans l'ordre :
L'ordinateur lit les instructions de haut en bas (comme d'habitude).
Puis, une fois arrivé à la fin de la boucle, il repart à la première instruction.
Il recommence alors à lire les instructions de haut en bas…
… Et il repart au début de la boucle.
Et c'est là qu'on retrouve… les conditions !
Comme je vous l'ai dit, il y a plusieurs manières de s'y prendre. Voyons voir sans plus tarder comment on réalise une boucle de type while
en C.
Créez un boucle while
Voici comment on construit une boucle while
:
while (/* Condition */)
{
// Instructions à répéter
}
Faisons un test simple : on va demander à l'utilisateur de taper le nombre 47. Tant qu'il n'a pas tapé le nombre 47, on lui redemande le nombre. Le programme ne pourra s'arrêter que si l'utilisateur tape le nombre 47 (je sais, je sais, je suis diabolique) :
int nombreEntre = 0;
while (nombreEntre != 47)
{
printf("Tapez le nombre 47 ! ");
scanf("%d", &nombreEntre);
}
Voici maintenant le test que j'ai fait (j'ai fait exprès de me tromper 2-3 fois avant de taper le bon nombre) :
Tapez le nombre 47 ! 10 Tapez le nombre 47 ! 27 Tapez le nombre 47 ! 40 Tapez le nombre 47 ! 47
Cette boucle while
se répète donc tant qu'on n'a pas tapé 47.
Maintenant, essayons quelque chose de plus intéressant : on veut que notre boucle se répète un certain nombre de fois. On va pour cela créer une variable compteur
qui vaudra 0 au début du programme et que l'on va incrémenter au fur et à mesure.
C'est quoi déjà, l'incrémentation ?
Ça consiste à ajouter 1 à la variable en faisant variable++;
.
Regardez attentivement ce bout de code et, surtout, essayez de le comprendre :
int compteur = 0;
while (compteur < 10)
{
printf("Bienvenue sur OpenClassrooms !\n");
compteur++;
}
Résultat :
Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms ! Bienvenue sur OpenClassrooms !
Ce code répète 10 fois l'affichage de "Bienvenue sur OpenClassrooms !".
Comment ça marche exactement ?
Au départ, on a une variable
compteur
initialisée à 0. Elle vaut donc 0 au début du programme.La boucle
while
ordonne la répétition TANT QUEcompteur
est inférieur à 10. Commecompteur
vaut 0 au départ, on rentre dans la boucle.On affiche la phrase « Bienvenue sur OpenClassrooms ! » via un
printf
.Grâce à
compteur++;
, on incrémente la valeur de la variablecompteur
(qui valait 0, elle vaut maintenant 1).On arrive à la fin de la boucle (accolade fermante) : on repart donc au début, au niveau du
while
pour refaire le test : « Est-ce quecompteur
est toujours inférieure à 10 ? ». Oui carcompteur
vaut 1. On recommence donc les instructions de la boucle.Et ainsi de suite :
compteur
va valoir progressivement 0, 1, 2, 3… 8, 9, et 10. Lorsquecompteur
vaut 10, la conditioncompteur < 10
est fausse. Comme l'instruction est fausse, on sort de la boucle.
On pourrait d'ailleurs voir que la variable compteur
augmente au fur et à mesure dans la boucle, en l'affichant dans le printf
:
int compteur = 0;
while (compteur < 10)
{
printf("La variable compteur vaut %d\n", compteur);
compteur++;
}
La variable compteur vaut 0 La variable compteur vaut 1 La variable compteur vaut 2 La variable compteur vaut 3 La variable compteur vaut 4 La variable compteur vaut 5 La variable compteur vaut 6 La variable compteur vaut 7 La variable compteur vaut 8 La variable compteur vaut 9
Voilà : si vous avez compris ça, vous avez tout compris !
Vous pouvez vous amuser à augmenter la limite du nombre de boucles : < 100
au lieu de < 10
. Cela m'aurait été d'ailleurs utile plus jeune pour rédiger les punitions que je devais réécrire 100 fois.
Voici un exemple de boucle infinie :
while (1)
{
printf("Boucle infinie\n");
}
Souvenez-vous des booléens : 1 = vrai, 0 = faux. Ici, la condition est toujours vraie, ce programme affichera donc « Boucle infinie » sans arrêt !
Que faire si on a lancé une boucle infinie par erreur ?
Nous allons voir dans la vidéo suivante comment créer votre première boucle while en faisant attention à ne pas tomber dans le piège de la boucle infinie :
Créez une boucle do… while
Ce type de boucle est moins utilisé. La seule chose qui change par rapport à une boucle while
, c'est la position de la condition : au lieu d'être au début de la boucle, la condition est à la fin :
int compteur = 0;
do
{
printf("Bienvenue sur OpenClassrooms !\n");
compteur++;
} while (compteur < 10);
Qu'est-ce que ça change ?
Il est donc parfois utile de faire des boucles de ce type, pour s'assurer que l'on rentre au moins une fois dans la boucle.
La vidéo montre la différence entre la boucle while et la boucle do...while :
Créez une boucle for
En théorie, while
permet de réaliser toutes les boucles que l'on veut.
Toutefois, comme switch
pour les conditions, il est parfois utile d'avoir un autre système de boucle, plus « condensé », plus rapide à écrire. Pour cela, on a les boucles for
.
Pour rappel, voici un exemple de boucle while
que nous avons vu tout à l'heure :
int compteur = 0;
while (compteur < 10)
{
printf("Bienvenue sur OpenClassrooms !\n");
compteur++;
}
Voici maintenant l'équivalent en boucle for
:
int compteur;
for (compteur = 0 ; compteur < 10 ; compteur++)
{
printf("Bienvenue sur OpenClassrooms !\n");
}
Quelles différences y a-t-il ?
On n'a pas initialisé la variable
compteur
à 0 dès sa déclaration (mais on aurait pu le faire).Il y a beaucoup de choses entre les parenthèses après
for
(nous allons détailler ça après).Il n'y a plus de
compteur++;
dans la boucle.
Intéressons-nous à ce qui se trouve entre les parenthèses, car c'est là que réside tout l'intérêt de la boucle for
: il y a trois instructions condensées, séparées par un point-virgule :
L'initialisation : cette première instruction est utilisée pour préparer notre variable
compteur
. Dans notre cas, on initialise la variable à 0.La condition : comme pour la boucle
while
, c'est la condition qui dit si la boucle doit être répétée ou non. Tant que la condition est vraie, la bouclefor
continue.L'incrémentation : cette dernière instruction est exécutée à la fin de chaque tour de boucle pour mettre à jour la variable
compteur
. La plupart du temps, on fera une incrémentation, mais on peut aussi faire une décrémentation (variable--
), ou encore n'importe quelle autre opération (variable += 2;
pour avancer de 2 en 2, par exemple).
Bref ! for
n'est rien d'autre qu'un condensé.
Pour terminer ce chapitre, je vous propose une dernière vidéo qui montre comment utiliser une boucle for
, et les erreurs à éviter :
En résumé
Les boucles sont des structures qui nous permettent de répéter une série d'instructions plusieurs fois.
Il existe plusieurs types de boucles :
while
,do… while
etfor
. Certaines sont plus adaptées que d'autres selon les cas.for
est probablement celle qu'on utilise le plus. On y fait très souvent des incrémentations ou des décrémentations de variables.
Vous êtes maintenant au point avec l’ensemble des concepts de base du langage. Voyons maintenant une notion très importante de la programmation. Comment créer une fonction ?