A alternativa a usar as condições if(), else() e else if() é usar o
switch.
O switch verifica se um valor é igual a outro, ou mais especificamente, qual dos casos é igual ao valor.
Escrevendo:
Um "switch" seguido de uma expressão entre ( ).
Diferentes casos "case" seguidos de com um valor, e um código a executar.
Um "break" no fim de cada caso (opcional, será explicado).
switch(x){
case 3:
cout << "It's a 3!" << endl;
break;
case 4:
cout << "It's a 4!" << endl;
break;
}
Neste caso, queremos verificar o valor da variável
x (inteiro).
Temos os casos 3 e 4.
Se o valor da variável for 3, é feito o print de "It's a 3!".
Se o valor da variável for 4, é feito o print de "It's a 4!".
Se não for nenhum dos dois, nada acontece.
Apenas valores integrais (int)
No switch, apenas podemos verificar valores integrais.
Estes são int e char (porque char também é inteiro, devido aos ASCII, vou falar disto muito brevemente).
Então, por exemplo, não podemos verificar uma string.
string s;
switch(s){
case "42":
cout << "Answer to everything" << endl;
break;
}
Isto não é possível e dá erro.
E mesmo podendo verificar um carácter, temos de ter em atenção para não usarmos aspas duplas (""), mas sim estas (''). Porque "" são para strings.
char c;
switch(c){
case "1":
cout << "Not valid!" << endl;
break;
}
Isto não é possível e dá erro.
Default
Para que aconteça algo se nenhum dos casos corresponde à expressão, usamos o
default.
O default é um caso especial opcional cujo código é executado só se nenhum dos outros casos for válido.
Em vez de "case" escrevemos "default", sem nenhum valor a seguir.
switch(x){
case 1:
cout << "1" << endl;
break;
case 2:
cout << "2" << endl;
break;
default:
cout << "Default" << endl;
break;
}
Estamos a avaliar uma variável
x novamente no switch.
Se for 1 ou 2, é feito o print de "1" ou "2", respetivamente.
Se não for nenhum dos dois, é executado o código do caso default, onde é feito o print de "Default".
Break
Certo, então devemos colocar "break" no fim de cada caso. Mas porquê?
É opcional mas se não o utilizarmos vai acontecer algo que não queremos de forma alguma.
Ao não termos o break, quando um caso é válido e o seu código é executado, o código de todos os outros casos abaixo dele também vai ser executado, até que se encontre um break.
switch(x){
case 1:
cout << "1" << endl;
case 2:
cout << "2" << endl;
case 3:
cout << "3" << endl;
break;
case 4:
cout << "4" << endl;
break;
case 5:
cout << "5" << endl;
break;
}
- Ou seja, se x for 1, é feito o print de "1";
- Como não existe break no final do caso, também se executa o caso 2, print de "2";
- Novamente como não há break, executa-se o caso abaixo, print de "3";
- Encontra-se um break então acaba aqui.
Programa exemplo~
#include <iostream>
using namespace std;
int main()
{
int month;
cout << "Enter this month's number: ";
cin >> month;
switch(month){
case 1:
cout << "January" << endl;
break;
case 2:
cout << "February" << endl;
break;
case 3:
cout << "March" << endl;
break;
case 4:
cout << "April" << endl;
break;
case 5:
cout << "May" << endl;
break;
case 6:
cout << "June" << endl;
break;
case 7:
cout << "July" << endl;
break;
case 8:
cout << "August" << endl;
break;
case 9:
cout << "September" << endl;
break;
case 10:
cout << "October" << endl;
break;
case 11:
cout << "November" << endl;
break;
case 12:
cout << "December" << endl;
break;
default:
cout << "Invalid month number!" << endl;
break;
}
}
Este programa pede-nos um número de um mês e usa o switch para verificar as 12 possibilidades, fazendo print do nome do mês.
Se o número não for de 1 a 12, é ativado o caso default que faz print da mensagem "Invalid month number!".
Referências - 3/12/2019