Analysez le code suivant. Sachant que a>b
, qu'affiche cette ligne ?
if ( a>b ) if ( b>a ) printf (“OK”); else printf (“KO”);
Cet exemple soulève deux questions :
if
se raporte le else
?Lorsque des if
sont imbriqués, un else
se rapporte toujours au dernier if
rencontré auquel un else
n’a pas encore été attribué.
Dans notre exemple initial, on s'aperçoit que le code affiche KO
, donc le else
se rapporte bien au dernier if
, c'est-à-dire le test if ( b>a )
.
Notez au passage que le compilateur nous alerte sur cette écriture ambiguë :
main.c:7:40: warning: add explicit braces to avoid dangling else [-Wdangling-else]
if ( a>b ) if ( b>a ) printf ("OK"); else printf ("KO");
Si vous suivez ce cours depuis le début, vous avez sans doute remarqué que les codes sources sont toujours présentés de la même façon. Après les accolades ouvrantes, le code est décalé vers la droite :
if (var > 1) {
printf ("Message");
if (var > 2) {
printf ("Un autre message");
if (var > 3) {
printf ("Encore un message");
if (var > 4) {
...
Ce type de présentation du code s'appelle l'indentation. La règle est simple :
Si l'on omet l'accolade parce qu'il n'y a qu'une instruction dans le bloc, cette instruction est tout de même indentée. Reprenons l'exemple de l'introduction, cette disposition du code est tout de même plus claire :
if ( a>b ) {
if ( b>a )
printf ("OK");
else
printf ("KO");
}
Si l'indentation ne change en rien l'exécution du code, elle est essentielle pour
structurer le code ; en premier lieu pour vous, mais aussi pour les autres. Certains
IDE proposent une indentation automatique. Sur Qt Creator, sélectionnez votre
code (ctrl-a
pour tout sélectionner), puis ctrl-i
pour indenter la sélection.
Pour indenter un code, vous pouvez utiliser la touche tabulation ou mettre des espaces, en général 2 ou 4. Quel que soit votre choix, ça ne changera en rien l'exécution du programme. Les fichiers sont moins volumineux avec les tabulations, mais avec les espaces l'affichage du code sera plus consistant d'un éditeur à l'autre.
Il est amusant de noter que ce débat anime la communauté des développeurs depuis des années. Ce débat est si passionné que les auteurs de la série Silicon Valley lui ont consacré une scène :
Personnellement, je suis un inconditionnel des tabulations.
En utilisant des if
imbriqués, écrire un programme qui affiche la mention
d'une note saisie :
Entrez votre note : 13.8
Mention assez bien
Qu'affiche le code suivant ?
if (1) if (0) printf ("Crac"); else printf ("Boum");
else
est associé au if (0)
.
Essaie encore ...
Qu'affiche le code suivant ?
if (1) {
if (0)
printf ("Crac");
else
printf ("Boum");
printf ("Hue");
}
Qu'affiche le code suivant ?
int score = 75;
if (score>=95) printf ("Grade A\n");
if (score>=85) printf ("Grade B\n");
if (score>=73) printf ("Grade C\n");
if (score>=64) printf ("Grade D\n");
else
, donc plusieurs tests peuvent s'exécuter.
Essaie encore ...
Pourquoi indenter son code est important ?