Utiliser l'instruction switch en C++
-
Utiliser l’instruction
switch
pour construire des scénarios de cheminement de code multi-cas -
Utilisez le mot-clé
default
pour spécifier un chemin de code par défaut dans leswitch
-
Utiliser la notation en bloc
{}
pour déclarer des variables locales dans différents chemins de code
Cet article explique plusieurs méthodes d’utilisation de l’instruction switch
en C++.
Utiliser l’instruction switch
pour construire des scénarios de cheminement de code multi-cas
Le mot-clé switch
est utilisé de la même manière que d’autres énoncés basés sur des blocs qui évaluent une expression donnée comme une condition. La seule différence est que l’expression doit avoir une valeur intégrale par rapport à chaque chemin de code spécifié par les mots-clés case
. Les chemins ont la structure suivante - case label : statements
où le label
est la valeur comparée à l’expression dans la condition switch
. Si l’expression correspond à l’un des labels, l’exécution du programme se déplace vers les instructions suivies après ce label. Notez que si le bloc case
ne se termine pas par l’instruction break;
, le programme continuera à exécuter les instructions dans tous les blocs case
suivants jusqu’à ce que le break;
ne soit pas atteint ou que la portée switch
elle-même soit terminée.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
enum WEEK { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
int main() {
int week_day;
cout << "Type the weekday (0-6): ";
cin >> week_day;
if (cin.fail()) {
cout << "Error occured when reading from stream!" << endl;
exit(EXIT_FAILURE);
};
switch (week_day) {
case Monday:
cout << "Monday\n";
break;
case Tuesday:
cout << "Tuesday\n";
break;
case Wednesday:
cout << "Wednesday\n";
break;
case Thursday:
cout << "Thursday\n";
break;
case Friday:
cout << "Friday\n";
break;
case Saturday:
cout << "Saturday\n";
break;
case Sunday:
cout << "Sunday\n";
break;
default:
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
Utilisez le mot-clé default
pour spécifier un chemin de code par défaut dans le switch
Le mot-clé default
définit le label de cas spécial qui est exécuté si aucun des cas déclarés ne correspond à l’expression switch
. Le point important à prendre en compte est que chaque bloc d’étiquette a besoin de l’instruction break
à la fin pour satisfaire la logique de base de la construction switch
. Remarquez que l’exemple de code suivant démontre l’instruction switch
sans aucune rupture, qui se comportera de manière assez abrupte. Si la valeur de week_day
correspond au premier label Monday
, alors toutes les instructions cout
seront exécutées, y compris celle qui se trouve à côté du label par défaut. D’autre part, si la valeur week_day
ne correspond à aucune case, alors les instructions cout
commençant par l’étiquette default
seront exécutées.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
enum WEEK { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
int main() {
int week_day;
cout << "Type the weekday (0-6): ";
cin >> week_day;
if (cin.fail()) {
cout << "Error occured when reading from stream!" << endl;
exit(EXIT_FAILURE);
};
switch (week_day) {
case Monday:
cout << "Monday\n";
case Tuesday:
cout << "Tuesday\n";
case Wednesday:
cout << "Wednesday\n";
case Thursday:
cout << "Thursday\n";
case Friday:
cout << "Friday\n";
default:
cout << "Wrong number specified!\n";
case Saturday:
cout << "Saturday\n";
case Sunday:
cout << "Sunday\n";
}
exit(EXIT_SUCCESS);
}
Utiliser la notation en bloc {}
pour déclarer des variables locales dans différents chemins de code
Comme d’autres déclarations basées sur des blocs, le corps du switch
a la portée dans laquelle les variables peuvent être déclarées, mais les cas nécessitent que l’utilisateur ait des variables locales dans chaque construction de case
. Notez que les instructions de chaque chemin de case
ont une portée partagée à moins d’être déclarées dans un bloc séparé à l’intérieur de {}
. Ainsi, si une variable est initialisée dans un case
, les instructions dans les autres cas ne peuvent pas se référer à la même variable. L’exemple suivant implémente l’instruction switch
où il y a un bloc local pour le case Friday
et où la variable à l’intérieur n’est pas visible depuis les autres cases
.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
enum WEEK { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
int main() {
int week_day;
cout << "Type the weekday (0-6): ";
cin >> week_day;
if (cin.fail()) {
cout << "Error occured when reading from stream!" << endl;
exit(EXIT_FAILURE);
};
switch (week_day) {
case Monday:
cout << "Monday\n";
break;
case Tuesday:
cout << "Tuesday\n";
break;
case Wednesday:
cout << "Wednesday\n";
break;
case Thursday:
cout << "Thursday\n";
break;
case Friday: {
string str = "Friday";
cout << str << endl;
break;
}
case Saturday:
cout << "Saturday\n";
break;
case Sunday:
cout << "Sunday\n";
break;
default:
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook