En C, il existe un opérateur conditionnel (switch..case
) qui permet de comparer
une variable avec plusieurs expressions.
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;
}
Variable
est égale à Valeur1
, c'est le bloc d'instructions 1
qui est exécuté.Variable
est égale à Valeur2
, c'est le bloc d'instructions 2
qui est exécuté.Variable
est égale à ValeurN
, c'est le bloc d'instructions N
qui est exécuté. Variable
n'est égale à aucune des ValeurX
, c'est le bloc d'instructions par defaut
qui est exécuté. Voici l'organigramme associé :
switch..case
ne peut pas tester des intervalles.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);
}
É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.
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.
É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
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");
}
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");
}
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;
//...
}
switch..case
.
Essaie encore ...