Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 19 di 47
  • livello principiante
Indice lezioni

Switch e operatori ternari: controlli condizionali in C

Controllare il flusso dei dati con lo switch e l'operatore ternario "? :".
Controllare il flusso dei dati con lo switch e l'operatore ternario "? :".
Link copiato negli appunti

Operatore Ternario: come funziona

L'operatore ternario "? :" è una forma sintetica dell'istruzione if-else, e per questo viene usata per ragioni di comodità e sinteticità del codice. L'operatore "? :" è l'unico operatore ternario del C, infatti opera su tre parametri a differenza degli altri operatori che spesso operano su uno o due parametri.

Di seguito presentiamo la sintassi dell'operatore e la corrispondente sintassi di un blocco if-else:

// Operatore ternario ?
espressione1 ? espressione2 : espressione3

// Corrispondente blocco if-else
if (espressione1)
{
espressione2;
} else {
espressione3;
}

Quindi se l'espressione1 risulta vera, si esegue l'espressione2, altrimenti si esegue l'espressione3. Per esempio il seguente codice assegna, nelle due forme equivalenti, alla variabile "max" il massimo tra "alfa" e "beta":

if (alfa > beta)
max = alfa;
else
max = beta;

// che corrisponde a...
max = (alfa > beta) ? alfa : beta;

Switch Case in C, la sintassi

Come annunciato, l'istruzione switch ha delle differenze dall'if-else, infatti può essere usata solo in alcuni casi dove:

  • Viene valutata solamente una variabile, tutte le scelte dipenderanno, infatti, da questa variabile. La variabile deve essere un tipo int, shor, long o char;
  • Ogni singolo valore della variabile può controllare solo una scelta. Una scelta finale, chiamata default è incaricata di catturare tutti i valori dei casi non specificati;

L'istruzione switch ha la seguente struttura:

switch (espressione) {
case elem1:
istruzione1;
break; opt
case elem2:
istruzione2;
break; opt

...

case elemn:
istruzionen;
break; opt
default:
istruzione;
break; opt
}

Notiamo che lo switch ha, inoltre, una struttura abbastanza particolare, è a cascata, cioè se eseguo il primo caso (avendo sotto degli altri) e non metto un break per uscire, continua ad eseguire anche le istruzioni successive che fanno parte di altre casistiche; questa struttura ricorda molto quella adottata nei file batch (.bat) utilizzati con il DOS e permette di ottenere effetti interessanti sulla selezione del codice, risparmiandone quando è comune a più casistiche. Ma vediamo l'esempio pratico, assumendo di avere la variabile intera "numero" che può assumere valori maggiori od uguali a zero.

switch (numero) {
case 0:
printf("Nessuno");
break;
case 1:
printf("Uno");
break;
case 2:
printf("Due");
break;
case 3:
case 4:
case 5:
printf("Valore positivo piccolo");
break;
default:
printf("Valore positivo grande");
break;
}

Esempio Pratico Switch Case in C

(Visualizza il sorgente completo)

L'IF, all'interno del programma, viene usato in larga misura; ad esempio, per avviare le scelte adeguate del menu si utilizza una serie di IF-ELSE:

101  else if (scelta == 1) // Visualizzo i contatti presenti
102  { // ELSEIF 1 - OPEN
103
104  visualizzaContatto(lista);
105
106  } // ELSEIF 1 - CLOSE
107  else if (scelta == 2) // Aggiungo un nuovo contatto
108  { // ELSEIF 2 - OPEN
109
110  lista = aggiungiContatto(lista);
111
112  } // ELSEIF 2 - CLOSE

Ti consigliamo anche