Use a instrução switch em C++
-
Utilizar a declaração
switch
para construir cenários de Caminhos de Códigos de Códigos de Casos Múltiplos -
Utilize a palavra-chave
default
para 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