Use a instrução switch em C++
-
Utilizar a declaração
switchpara construir cenários de Caminhos de Códigos de Códigos de Casos Múltiplos -
Utilize a palavra-chave
defaultpara especificar um caminho de código por defeito no blocoswitch -
Utilizar a
{}Notação de bloco para declarar variáveis locais em diferentes trajectórias de código
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);
}
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