Structures de contrôle : les branchements conditionnels
On a souvent besoin de n’effectuer certaines instructions que dans certains cas. On dispose pour cela du IF et du SWITCH.
If – Else (Si – Sinon)
structure : if (expression) instruction1 ou : if (expression) instruction1 else instruction2
Si l’expression est vraie on effectue l’instruction1, puis on passe à la suite. Sinon, on effectue l’instruction 2 puis on passe à la suite (dans le cas sans else on passe directement à la suite).
Exercice (jeu) : modifier le jeu de l’exercice (do_while) en précisant au joueur à chaque essai si sa proposition est trop grande ou trop petite.
L’instruction d’un if peut être un autre if (imbriqué). Exemple :
if(c1) i1; else if (c2) i2; else if (c3) i3; else i4; i5;
Explication : si c1 est vrai alors on exécute i1 puis i5, sinon mais si c2 alors i2 puis i5, … Si ni c1 ni c2 ni c3 alors i4 puis i5.
Le else étant facultatif, il peut y avoir une ambiguïté s’il y a moins de else que de if. En fait, un else se rapporte toujours au if non terminé (c’est à dire à qui on n’a pas encore attribué de else) le plus proche. Une solution pour lever l’mbiguïté est de délimiter le if sans else en l’entourant de {}.
exemples :
• if(c1) if(c2) i1; else i2; si c1 et c2 alors i1, si c1 et pas c2 alors i2, si pas c1 alors (quel que soit c2) rien. • if (c1) {if (c2) i1;} else i2; si c1 et c2 alors i1, si c1 et pas c2 alors rien, si pas c1 (quel que soit c2) alors i2.
Switch – Case (brancher – dans le cas)
Le switch est aussi appellé le « goto calculé » Cette structure de contrôle permet de remplacer une suite trop longue de if et else if (mais rien ne vous force à l’utiliser, vous pouvez parfaitement vous limiter aux ifs).
structure : switch(expression_entière)
{ case cste1:instructions case cste2:instructions …….. case csteN:instructions default :instructions }
L’expression ne peut être qu’entière (char, int, long). L’expression est évaluée, puis on passe directement au « case » correspondant à la valeur trouvée. Le cas default est facultatif, mais si il est prévu il doit être le dernier cas.
exemple : fonction vérifiant si son argument c est une voyelle.
int voyelle(char c) { switch(c) { case ‘a’: case ‘e’: case ‘i’: case ‘o’: case ‘u’: case ‘y’:return(1); /* 1=vrai */ default :return(0) } }