Pesquisar aqui

Friday, December 13, 2019

C++ - Switch

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


No comments:

Post a Comment

Comente de forma construtiva...

Note: Only a member of this blog may post a comment.