Sélection Multiple : l'instruction switch
L'instruction « switch » permet d'effectuer une suite de tests d'égalité consécutifs pour une valeur donnée et de déclencher des instructions selon la valeur.
Nous allons illustrer son fonctionnement par un exemple.
int main()
{
int c;
printf("\n entrer un nombre ");
scanf("%d",&c);
switch (c)
{
case 1: printf("\n un");
case 2 : printf("\n deux");
case 3 : printf("\n trois");
default : printf("\n autre chose");
}
printf("\n");
}
Si l'utilisateur tape le chiffre 1, on affiche : un deux trois autre chose S'il tape le chiffre 2 on affiche : deux trois autre chose S'il tape le chiffre 3 on affiche : trois autre chose S'il tape un entier autre que 1, 2 ou 3, on affiche : autre chose
La valeur de c étant connue, le switch va tester d'abord si elle vaut 1.
Si c'est le cas il va en séquence exécuter TOUTES les instructions à partir de celle qu'il doit effectuer si le test est vrai.
Si c ne vaut pas 1, il teste s'il vaut 2, s'il vaut 2 il va en séquence exécuter TOUTES les instructions à partir de celle qu'il doit effectuer si le test est vrai, etc.
C'est ainsi que fonctionne un « switch ». Si l'on désire exécuter juste l'instruction associée à un « case », il faut ajouter l'instruction break après.
Le code modifié est :
int main()
{
int c;
printf("\n entrer un nombre ");
scanf("%d",&c);
switch (c)
{
case 1: printf("\n un"); break;
case 2 : printf("\n deux"); break;
case 3 : printf("\n trois"); break;
default : printf("\n autre chose");
}
// si une des instructions 'break' ci-dessus est effectuee, on se branche directement ici
// apres le delimiteur '}' qui ferme le bloc de l'instruction 'switch'.
printf("\n");
}
Dans ce dernier exemple, si l'utilisateur tape '1', le programme affichera uniquement 'un'. S'il tape '2', le programme affichera uniquement 'deux".
S'il tape '3', il affichera uniquement 'trois'. Si l'utilisateur tape autre chose, le programme affichera 'autre chose'.
L'instruction break effectue un branchement automatique au delà du délimiteur '}' qui ferme le bloc de l'instruction "switch".
Pour comparer on ne peut utiliser, dans le « case », que des expressions constantes. C'est à dire des expressions dont les valeurs sont déterminées lors de la compilation ou de l'édition de lien.
L'instruction « Switch » est très utile pour la lisibilité du programme, car elle permet d'éviter, dans le cas de test d'égalités pour la valeur d'une expression, des if... else... imbriqués.
#include < stdio.h >
void main( void ) {
float x,y, res;
char op; int impos=0;
/* Lecture de l'opération et des deux nombres */
printf("Opération(+ - * /): ");
scanf("%c", &op);
printf("Premier opérande: ");
scanf("%f", &x);
printf("Deuxième opérande: ");
scanf("%f", &y);
/* Suivant le caractère op, une addition, une soustraction, une multiplication ou une division est réalisée */
switch (op)
{
case '*': res = x * y; break;
case '/': if(y!=0) res = x / y;
else {
printf("Division par zéro impossible !\n");
impos=1;
}break;
case '+': res = x + y; break;
case '-': res = x - y; break;
default: impos = 1;
printf("Caractère non reconnu !\n");
}
if( impos ==0)
printf("Résultat : %f\n", res);
return 0;
}