Utilice la declaración de switch en C++

Jinku Hu 12 octubre 2023
  1. Usar la declaración switch para construir escenarios de rutas de código multi-caso
  2. Use la palabra clave default para especificar una ruta de código por defecto en el switch
  3. Usar la notación de bloque {} para declarar las variables locales en diferentes rutas de código
Utilice la declaración de switch en C++

Este artículo explicará varios métodos de cómo usar la declaración switch en C++.

Usar la declaración switch para construir escenarios de rutas de código multi-caso

La palabra clave switch se utiliza de manera similar a otras declaraciones basadas en bloques que evalúan una expresión dada como una condición. La única diferencia es que la expresión debe tener un valor integral comparado con cada ruta de código especificada por las palabras clave case. Las rutas tienen la siguiente estructura - case label : statements donde la label es el valor comparado con la expresión en la condición switch. Si la expresión coincide con una de las etiquetas, la ejecución del programa se mueve a las sentencias que siguen a esa etiqueta. Observe que si el bloque case no termina con la sentencia break;, el programa continuará ejecutando sentencias en todos los bloques case siguientes hasta que no se alcance el break; o hasta que el ámbito switch mismo termine.

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

Use la palabra clave default para especificar una ruta de código por defecto en el switch

La palabra clave default define la etiqueta de caso especial que se ejecuta si ninguno de los casos declarados coincide con la expresión switch. El punto importante que hay que tener en cuenta es que cada bloque de etiquetas necesita la declaración break; al final para satisfacer la lógica básica de la construcción de switch. Observe que el siguiente ejemplo de código demuestra la declaración switch sin ninguna ruptura, que se comportará de forma bastante abrupta. Si el valor de week_day coincide con la primera etiqueta Monday, entonces se ejecutarán todas las sentencias cout, incluyendo la que está junto a la etiqueta por defecto. Por otro lado, si el valor de week_day no coincide con ninguna etiqueta del caso, entonces se ejecutarán las sentencias cout que empiecen con la etiqueta 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);
}

Usar la notación de bloque {} para declarar las variables locales en diferentes rutas de código

Como otras declaraciones basadas en bloques, el cuerpo switch tiene el alcance en el que se pueden declarar las variables, pero los casos requieren que el usuario tenga variables locales en cada construcción case. Nótese que las sentencias de cada ruta case tienen un alcance compartido a menos que se declaren dentro de un bloque separado dentro de {}. Por lo tanto, si una variable se inicializa en un case, las declaraciones en otros casos no pueden referirse a la misma variable. El siguiente ejemplo implementa la declaración switch donde hay un bloque local para el case Friday y la variable dentro no se ve desde otros 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);
}
Autor: 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