Utiliser l'instruction switch en C++

  1. Utiliser l’instruction switch pour construire des scénarios de cheminement de code multi-cas
  2. Utilisez le mot-clé default pour spécifier un chemin de code par défaut dans le switch
  3. 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::cout; using std::endl;
using std::cin; 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::cout; using std::endl;
using std::cin; 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::cout; using std::endl;
using std::cin; 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);
}