Published
Last modified
C/C++ - Switch, Case e Default
Além de if e else, há uma estrutura em C/C++ que permite que a partir de uma variável possamos controlar que ponto do fluxo ou bloco de código desejamos executar, assim tendo uma gama maior de condições pré-definidas para trabalhar. Continue lendo para descobrir que estrutura é essa.
Uma outra forma de estrutura seletiva é o SWITCH. Dentro dos switch
há o case
(que significa caso). Ou seja, é quase que um if com várias possibilidades, mas com algumas diferenças importantes.
1a diferença: Os cases não aceitam operadores lógicos. Portanto, não é possível fazer uma comparação. Isso limita o case a apenas valores definidos.
2a diferença: O switch executa seu bloco em cascata. Ou seja, se a variável indicar para o primeiro case e dentro do switch tiver 5 cases, o switch executará todos os outros 4 cases a não ser que utilizemos o comando para sair do switch. (Nos referimos ao BREAK).
Agora, que conhecemos diferenças importantes, vamos ver como proceder com o switch / case.
Primeiro o comando SWITCH e entre parênteses a variável na qual está guardado o valor que será avaliado pelo case. Então, abre-se o bloco de dados. Dentro do bloco de dados colocamos o comando CASE e logo após um valor terminando a linha com dois pontos (:). Preste atenção no tipo de dado que será colocado, pois há diferenças entre um dado e outro. Por exemplo: 1 não é a mesma coisa que '1' e 'a' não é a mesma coisa que 'A'...
Então, é estruturado os comando que serão executados pelo case.
Estruturadamente, seria isso:
SWITCH (variável){ CASE valor1: Dados a serem executados BREAK; CASE valor2: Dados a serem executados BREAK; }
Vejamos o exemplo abaixo:
#include <iostream> #include <cstdlib> using namespace std; int main (void){ int a, b, c, operacao; cout <<"Digite o 1o valor: "; cin >> a; cin.ignore (); cout <<"Digite o 2o valor: "; cin >> b; cin.ignore (); cout <<"Que operacao deseja realizar?\n \1. Adicao\t2.Subtracao\t3.Multiplicacao\t4.Divisao\n\n=>"; cin >> operacao; cin.ignore (); system ("cls"); switch (operacao){ case 1: c=a+b; cout <<a<<" + "<<b<<" = "<<c<<"\n\n"; break; case 2: c=a-b; cout <<a<<" - "<<b<<" = "<<c<<"\n\n"; break; case 3: c=a*b; cout <<a<<" * "<<b<<" = "<<c<<"\n\n"; break; case 4: c=a/b; cout <<a<<" / "<<b<<" = "<<c<<"\n\n"; break; } system ("pause"); return EXIT_SUCCESS; }
Perceba que no final de cada case
há um break
. Porque se não houvesse, o switch
continuaria executando até o final.
Default
Default, do inglês padrão, é o case que é ativado caso não tenha achado nenhum case definido. Ou seja, é o que aconteceria em último caso. Vamos imaginar o seguinte cenário: Seu programa pede para que o usuário digite apenas duas opções (S ou N) para reiniciar o programa. Mas, propositalmente ou por engano, o usuário digita uma opção totalmente diferente. E agora? O que seu programa deve fazer? É aqui que o default entra. Geralmente o default é quando é previsto uma entrada de dado incorreta, imprevisível ou não de acordo com o contexto.
Usando o próprio cenário acima, veja o código abaixo.
#include <iostream> #include <cstdlib> #include <ctype.h> using namespace std; int reiniciar (void); int main (void){ reiniciar (); } int reiniciar (void){ char opcao; cout <<"Deseja reiniciar o programa? [S/N]\n"; cin >> opcao; opcao=toupper(opcao); // deixa a letra maiúscula switch (opcao){ case 'S': //Entre aspas simples porque é um caracter system ("cls"); main (); case 'N': //Entre aspas simples porque é um caracter return EXIT_SUCCESS; default: cout <<"\aOpcao invalida!\n\n"; reiniciar (); } }
Como podemos ver, há dois casos: S para reiniciar ou N para sair. Se por acaso alguém digitar algo diferente disso, executa-se o default. Como a linguagem C/C++ é case sensitive (diferencia maiúsculas de minúsculas) usamos uma função para deixar a letra maiúscula (toupper da biblioteca ctype). Agora, não importa o que o usuário digitar, pois o programa está preparado para reagir à qualquer entrada de dado.
C/C++ - Switch, Case e Default by Denys Xavier is licensed under a Creative Commons Attribution 4.0 International License.