Use a instrução switch em C++

Jinku Hu 12 outubro 2023
  1. Utilizar a declaração switch para construir cenários de Caminhos de Códigos de Códigos de Casos Múltiplos
  2. Utilize a palavra-chave default para especificar um caminho de código por defeito no bloco switch
  3. Utilizar a {} Notação de bloco para declarar variáveis locais em diferentes trajectórias de código
Use a instrução switch em C++

Este artigo explicará vários métodos de como utilizar a instrução de switch em C++.

Utilizar a declaração switch para construir cenários de Caminhos de Códigos de Códigos de Casos Múltiplos

A palavra-chave switch é utilizada de forma semelhante a outras declarações baseadas em blocos que avaliam uma dada expressão como uma condição. A única diferença é que a expressão deve ter um valor integral em relação a cada caminho de código especificado pelas palavras-chave case. Os caminhos têm a seguinte estrutura - case label : statements em que a label é o valor comparado com a expressão na condição de switch. Se a expressão corresponder a uma das etiquetas, a execução do programa move-se para as afirmações seguidas após essa etiqueta. Note que se o bloco case não terminar com a declaração break;, o programa continuará a executar declarações em todos os blocos de case seguintes até que a break; não seja alcançada ou até que o próprio âmbito da switch 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);
}

Utilize a palavra-chave default para especificar um caminho de código por defeito no bloco switch

A palavra-chave default define a etiqueta do caso especial que é executada se nenhum dos casos declarados corresponder à expressão switch. O ponto importante a ter em conta é que cada bloco de etiqueta precisa da declaração de break; no final para satisfazer a lógica básica da construção do switch. Repare que a próxima amostra de código demonstra a declaração switch sem quaisquer quebras, que se comportará de forma bastante abrupta. Se o valor week_day corresponder à primeira etiqueta Monday, então cada declaração cout será executada, incluindo a que se encontra ao lado da etiqueta predefinida. Por outro lado, se o valor week_day não corresponder a nenhuma etiqueta de caso, então as declarações cout que começam com a etiqueta default serão executadas.

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

Utilizar a {} Notação de bloco para declarar variáveis locais em diferentes trajectórias de código

Tal como outras declarações baseadas em blocos, o switch tem o âmbito em que as variáveis podem ser declaradas, mas os casos exigem que o utilizador tenha variáveis locais em cada switch. Note-se que as declarações de cada caminho de case têm âmbito partilhado, a menos que sejam declaradas dentro de um bloco separado dentro de {}. Assim, se uma variável for inicializada num case, as declarações nos outros casos não podem referir-se à mesma variável. O exemplo seguinte implementa a declaração de switch onde existe um bloco local para o case Friday e a variável dentro dele não é vista a partir de outros 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);
}
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