Instrucțiunea switch

Instrucțiunea switch este o structură alternativă multiplă: în funcție de valoarea unei expresii, execută blocul de instrucțiuni din cazul care se potrivește.

Atunci când luăm o decizie în funcție de valoarea unei singure expresii care poate lua mai multe valori, switch este adesea mai clar decât o înlănțuire lungă de if - else if. Este echivalentul în C++ al structurii în cazul din pseudocod.

Schema logică a instrucțiunii switch
Schema logică a instrucțiunii switch

Sintaxă

switch (expresie) {
    case valoare_1:
        // instructiuni
        break;
    case valoare_2:
        // instructiuni
        break;
    default:
        // instructiuni cand niciun caz nu se potriveste
}
  • expresie este valoarea pe care o testăm (de obicei o variabilă întreagă sau de tip caracter);
  • fiecare case corespunde unei valori posibile;
  • default (opțional) se execută când expresia nu se potrivește cu niciun caz.

Instrucțiunea break; de la finalul fiecărui caz este esențială: ea oprește execuția și „iese” din switch. Fără break, programul ar continua să execute și instrucțiunile cazurilor următoare.

Efect

  1. se evaluează expresia;
  2. valoarea ei se compară, pe rând, cu valorile cazurilor;
  3. la prima potrivire, se execută instrucțiunile cazului respectiv, până la break;
  4. dacă nu se potrivește niciun caz, se execută ramura default, dacă există.

Publicitate

Exemplu

Enunț. Se citesc două numere naturale, anul și luna. Să se afișeze câte zile are luna respectivă (pentru februarie se ține cont dacă anul este bisect).

int an, luna;
cin >> an >> luna;
switch (luna) {
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
        cout << 31;
        break;
    case 4: case 6: case 9: case 11:
        cout << 30;
        break;
    case 2:
        cout << (an % 4 == 0 ? 29 : 28);
        break;
}

Mai multe cazuri care duc la același rezultat pot fi scrise unul după altul, ca la lunile de 31 de zile. Pentru luna februarie folosim operatorul ternar pentru a alege între 28 și 29 de zile, în funcție de an.

Am folosit aici regula simplificată a anului bisect (divizibil cu 4), suficientă pentru anii uzuali. Regula completă ține cont și de divizibilitatea cu 100 și 400.