Instrucțiunea switch
Instrucțiunea
switcheste 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.
Sintaxă
switch (expresie) {
case valoare_1:
// instructiuni
break;
case valoare_2:
// instructiuni
break;
default:
// instructiuni cand niciun caz nu se potriveste
}
expresieeste valoarea pe care o testăm (de obicei o variabilă întreagă sau de tip caracter);- fiecare
casecorespunde 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
- se evaluează expresia;
- valoarea ei se compară, pe rând, cu valorile cazurilor;
- la prima potrivire, se execută instrucțiunile cazului respectiv, până la
break; - dacă nu se potrivește niciun caz, se execută ramura
default, dacă există.
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.