Usa istruzione switch in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’istruzione switch per costruire scenari di percorso di codice multi-case
  2. Usa la parola chiave default per specificare un percorso di codice predefinito nel interruttore
  3. Usa la notazione di blocco {} per dichiarare variabili locali in diversi percorsi di codice
Usa istruzione switch in C++

Questo articolo spiegherà diversi metodi su come utilizzare l’istruzione switch in C++.

Usa l’istruzione switch per costruire scenari di percorso di codice multi-case

La parola chiave switch viene utilizzata in modo simile ad altre istruzioni basate su blocchi che valutano una data espressione come una condizione. L’unica differenza è che l’espressione deve avere un valore integrale rispetto a ciascun percorso di codice specificato dalle parole chiave case. I percorsi hanno la seguente struttura - case label : statements dove l’label è il valore rispetto all’espressione nella condizione switch. Se l’espressione corrisponde a una delle etichette, l’esecuzione del programma si sposta sulle istruzioni seguite dopo tale etichetta. Nota che se il blocco case non finisce con break; istruzione, il programma continuerà ad eseguire le istruzioni in tutti i seguenti blocchi case fino al termine break; non viene raggiunto o l’ambito di switch stesso viene terminato.

#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);
}

Usa la parola chiave default per specificare un percorso di codice predefinito nel interruttore

La parola chiave default definisce l’etichetta del caso speciale che viene eseguita se nessuno dei casi dichiarati corrisponde all’espressione switch. Il punto importante di cui essere consapevoli è che ogni blocco di etichette ha bisogno della break; istruzione alla fine per soddisfare la logica di base del costrutto switch. Si noti che il prossimo esempio di codice mostra l’istruzione switch senza interruzioni, che si comporterà in modo piuttosto brusco. Se il valore week_day corrisponde alla prima etichetta Monday, verrà eseguita ogni istruzione cout, inclusa quella accanto all’etichetta predefinita. D’altra parte, se il valore week_day non corrisponde a nessuna etichetta di case, vengono eseguite le istruzioni cout che iniziano con l’etichetta default.

#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);
}

Usa la notazione di blocco {} per dichiarare variabili locali in diversi percorsi di codice

Come altre istruzioni basate su blocchi, il corpo switch ha l’ambito in cui le variabili possono essere dichiarate, ma i casi richiedono che l’utente abbia variabili locali in ogni costrutto case. Nota che le istruzioni di ogni percorso case hanno un ambito condiviso a meno che non siano dichiarate all’interno di un blocco separato all’interno di {}. Quindi, se una variabile viene inizializzata in un case, le istruzioni negli altri casi non possono fare riferimento alla stessa variabile. Il seguente esempio implementa l’istruzione switch dove c’è un blocco locale per il case Friday e la variabile all’interno non è vista da altri case.

#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);
}
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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