
Instrucțiunile alternative în C++: if și switch
Programele C++, pe lângă secvențe liniare de instrucțiuni, pot să repete anumite instrucțiuni, cât și să facă decizii, bifurcând execuția programului. În acest articol voi prezenta cum se folosesc instrucțiunile alternative if și switch.
Instrucțiunea if
Instrucțiunea if este folosită pentru a executa o anumită secvență de instrucțiuni dacă și numai dacă condiția dată este adevărată.
Sintaxă if
if (conditie)    instructiune / block de instructiunielse    instructiune / block de instructiuniSemantică if
Întâi se evaluează expresia conditie. Dacă aceasta este true, se execută instrucțiunile de mai jos (de pe prima ramură). Dacă expresia se evaluează la false, se execută instrucțiunile de pe ramura else. Ramura else este opțională. Dacă aceasta nu există, iar expresia este falsă, atunci pur și simplu se trece mai departe. Exemplu:
if (x == 618)    cout << "Valoarea lui x este 618.\n";Dacă în cazul în care valoarea lui x nu este 618 vrem să se afișeze un mesaj corespunzător, vom scrie:
if (x == 618)    cout << "Valoarea lui x este 618.\n";else    cout << "Valoarea lui x nu este 618.\n";Iată două exemple unde se folosește instrucțiunea if:
if (x == 0 || x == 1)    cout << x << " nu este nici prim, nici compus.\n";else    cout << x << " este prim sau compus.\n";
if (n < 10)    cout << n << " are 1 cifra.\n";else if (n < 100)    cout << n << " are 2 cifre.\n";else if (n < 1000)    cout << n << " are 3 cifre.\n";else    cout << n << " are un numar necunoscut de cifre.\n";Atenție! Fie codul de mai jos:
if (a == b)    if (a == c)        cout << "a = b = c";else    cout << "a != c";În ciuda indentării sugestive, în cazul în care a != b, rezultatul nu va fi cel așteptat. Compilatorul crede că ramura else este pentru al doilea if, așa că nu se va afișa nimic. Pentru a evita situațiile de genul acesta, în cazul în care pe prima ramură a unui if se află alt if, recomand încadrarea acestei ramure între acolade, pentru a fi clar al cui if este else-ul. Deci, secvența de mai sus trebuie modificată astfel:
if (a == b) {    if (a == c)        cout << "a = b = c";}else    cout << "a != c";Instrucțiunea switch
Instrucțiunea switch are rolul de a parcurge un șir de constante și de a verifica dacă valoarea unei expresii este egală cu una dintre aceste constante.
Sintaxă switch
switch (expresie) {  case constanta1:    instructiuni1;    break;  case constanta2:    instructiuni2;    break;  ...  case constantaN:    instructiuniN;    break;  default:    instructiuniDefault;}Semantică switch
Se evaluează dacă expresie este egală cu constanta1. Dacă da, se execută instructiuni1 și se iese din switch (prin instrucțiunea break). Dacă nu, se continuă testele cu constanta2 etc. Dacă expresie nu este egală nici cu constantaN, atunci se execută instructiuniDefault și se iese din switch. Cazul default este opțional. Dacă la cazul k lipsește instrucțiunea break, iar expresie este egală cu constantaK, se vor executa toate instrucțiunile din switch de la caseK în jos, până la întâlnirea primului break. Nu contează dacă ultimul caz conține break sau nu, pentru că oricum se află la finalul switch-ului.
Atenție! Dacă la două cazuri declarați câte o variabilă locală, iar acestea au același nume, trebuie să încadrați instrucțiunile de la cele două cazuri între acolade, căci altfel variabila se va considera redeclarată și programul nu se va compila.
Acesta este unul dintre marele dezavantaje ale instrucțiunii switch. Foarte rar folosesc switch în locul if-ului. Iată două exemple ce folosesc instrucțiunea switch:
switch (killedBySignal) {  case 8:    cout << "Floating point error.\n";    break;  case 11:    cout << "Segmentation fault.\n";    break;  default:    cout << "Cod necunoscut.\n";}
switch (zi) {  case 1:  case 2:  case 3:  case 4:  case 5:    cout << "Zi lucratoare\n";    break;  default:    cout << "Zi nelucratoare\n";}Următorul tutorial C++ este Instrucțiunile repetitive în C++: for, while, do while. Dacă ai vreo problemă în înțelegerea structurilor alternative if și switch, lasă un comentariu și te voi ajuta