Cours 5.5. L'instruction switch..case

En C, il existe un opérateur conditionnel (switch..case) qui permet de comparer une variable avec plusieurs expressions.

Syntaxe

La syntaxe générale est la suivante :

switch ( Variable ) {
    case Valeur1:   Bloc d'instructions 1;
                    break;

    case Valeur2:   Bloc d'instructions 2;
                    break;
    ...

    case ValeurN:   Bloc d'instructions N;
                    break;

    default:        Bloc d'instructions par défaut;
}

Voici l'organigramme associé :

Organigramme général de l'instruction switch..case en C

Un switch..case ne peut pas tester des intervalles.

Exemple

Voici un exemple qui reprend un exercice précédent. Cette fois-ci la succession de if est remplacée par un seul switch..case :

// Affiche le chiffre en toutes lettres
switch (chiffre) {
    case 0: printf ("zéro\n"); break;
    case 1: printf ("un\n"); break;
    case 2: printf ("deux\n"); break;
    case 3: printf ("trois\n"); break;
    case 4: printf ("quatre\n"); break;
    case 5: printf ("cinq\n"); break;
    case 6: printf ("six\n"); break;
    case 7: printf ("sept\n"); break;
    case 8: printf ("huit\n"); break;
    case 9: printf ("neuf\n"); break;
    default : printf ("%d n'est pas un chiffre\n", chiffre);
}

Exercice 1

Écrire un programme qui demande à l'utilisateur de saisir un chiffre. À l'aide de l'instruction switch..case affichez le chiffre en toutes lettres en anglais.

unsigned int chiffre;

// Demande à l'utilisateur d'entrer un chiffre
printf ("Enter a number between 0 and 9 : ");
scanf ("%u", &chiffre);

// Affiche le chiffre en toutes lettres en anglais
// COMPLETEZ ICI

Voici l'affichage attendu :

Enter a number between 0 and 9 : 7
seven
Enter a number between 0 and 9 : 12
12 is not between 0 and 9.

Exercice 2

La variable chiffre est maintenant de type char et contient un caractère. Si le caractère représente un chiffre (de 0 à 9), on affiche ce chiffre en anglais en toutes lettres. Si ce n'est pas un chiffre, on affiche : Non valid character.

char chiffre = '7';

// Affiche le chiffre en toutes lettres en anglais
// COMPLETEZ ICI

Voici l'affichage attendu avec char chiffre = '7';

seven

Voici l'affichage attendu avec char chiffre = 'x';

x is not between 0 and 9.

Exercice 3

Écrire un programme qui convertit un caractère hex contenant un symbole hexadécimal (de 0 à F). Le résultat de conversion en base 10 sera affecté à la variable dec. On ne traitera que les caractères majuscules pour les lettres de A à F. Si le caractère n'est pas valide, on mettra -1 dans la variable dec.

// Caractère à convertir
char hex = 'B';
// Résultat en base 10
short dec;

// Convertit le cractère hexadécimal en base 10
// COMPLETEZ ICI

// Affiche le résultat de la conversion
if (dec==-1) printf ("Conversion non valide\n");
else printf ("0x%c = %d en décimal\n", hex, dec);

Voici l'affichage attendu avec char hex = 'F';

0xF = 15 en décimal

Voici l'affichage attendu avec char hex = 'f';

Conversion non valide

Quiz

Qu'affiche le code suivant ?

int x = 2;
switch (x) {
    case 0: printf ("Bonjour"); break;
    case 1: printf ("Hola"); break;
    case 2: printf ("Konnichiwa"); break;
    default : printf ("Hello");
}
Vérifier Bravo ! Comme x=2, c'est le case 2: qui est exécuté. Essaie encore ...

Qu'affiche le code suivant ?

int x = 3;
switch (x) {
    case 0: printf ("Bonjour"); break;
    case 1: printf ("Hola"); break;
    case 2: printf ("Konnichiwa"); break;
    default : printf ("Hello");
}
Vérifier Bravo ! x ne correspond à aucun des cas. C'est l'instruction par défaut qui s'exécute. Essaie encore ...

Quelle syntaxe permet de tester un intervalle avec un switch..case ?

switch (note) {
    //...
    ??? : printf ("Mention très bien"); break;
    //...
}
Vérifier Bravo ! On ne peut pas tester un intervalle avec un switch..case. Essaie encore ...

Voir aussi


Dernière mise à jour : 12/10/2021