Switch case in C è un costrutto a selezione multipla, previsto dal linguaggio C.
Lo switch case consente di implementare delle decisioni multiple e si basa dunque sul confronto tra il risultato di un’espressione e un insieme di valori costanti.
La parola switch è seguita da un’espressione racchiusa tra parentesi tonde, ad esempio switch (a). Il risultato deve essere di tipo int o char.
Il resto del costrutto è costituito dai vari case con a seguire un’espressione (costante), separata utilizzando il simbolo dei due punti da una o più istruzioni.
Uso di switch case in C
Di seguito un esempio di switch case in C che chiede l’inserimento di un numero compreso tra zero e quattro. Se si inserisce un numero compreso tra 0 e 4 si ha un messaggio con la conferma del numero inserito. Altrimenti il programma restituisce il messaggio non compreso.
Utilizzeremo l’istruzione break che provoca dunque l’uscita immediata dallo switch, come avevamo accennato nel precedente tutorial.
Ecco quindi il listato completo di un esempio d’uso, dello switch case in C, proposto a scopo didattico.
#include <stdio.h>
int main() {
int a;
printf("inserisci un numero compreso tra zero e quattro:\n");
scanf("%d", &a);
switch (a) {
case 0:
printf("il numero e' zero\n");
break;//causa l'uscita immediata dallo switch
case 1:
printf("il numero e' uno\n");
break;
case 2:
printf("il numero e' due\n");
break;
case 3:
printf("il numero e' tre\n");
break;
case 4:
printf("il numero e' quattro\n");
break;
default:
printf("numero non compreso\n");
break;
}
system("PAUSE");
return 0;
}
Quando viene eseguito, il programma confronta l’espressione a con zero, se i valori sono uguali si passa a quello che c’è scritto dopo i due punti e dopo si esce dallo switch grazie all’istruzione break. Altrimenti si continua e se l’espressione a non corrisponde a nessuna delle costanti si arriva fino a default e si prosegue con le istruzioni indicate dopo i due punti.
Questo è solo un semplice esempio di switch case in C, andando avanti nei tutorial vi proporrò molte altre esercitazioni.
L’istruzione switch case è utilizzata quando ci sono dei problemi in cui la soluzione richiede una serie di scelte successive.
Infatti, utilizzare numerosi if a cascata, può essere una soluzione problematica. Allora è meglio ricorrere al costrutto di selezione multipla switch case.
Sintassi del costrutto switch case
La sintassi è la seguente:
switch(<Espressione>) { case <CostanteIntera1>: <Istruzioni>;
case <CostanteIntera2>: <Istruzioni>;
….
default <Istruzioni>; }
L’espressione valutata è di qualsiasi tipo intero e comunque verrà convertita in int.
Quindi, ad ogni case è associato un valore costante intero tra i possibili e potenziali valori che può assumere Espressione.
Nel caso in cui non si verifichi un case si passa al case successivo, fino a soddisfare la condizione.
Se nessuna delle costanti corrisponde al valore di Espressione allora viene eseguito il blocco default, se presente.
Ma il linguaggio C si dice che prevede il fall-trought automatico tra le clausole dello switch. Cioè anche quando una clausola viene eseguita, il controllo passa alle clausole successive (default compreso) e non si esce dallo switch.
Diventa necessario allora interrompere l’esecuzione sequenziale del programma e saltare alla fine dello switch.
Per farlo si pertanto utilizza l’istruzione break che consente l’uscita immediata dallo switch.
Nella prossima lezione vedremo un esempio di applicazione di switch case in C, al fine di comprenderne meglio l’utilizzo.
In questa lezione parleremo di if else in C e faremo degli esempi per cercare di capire come utilizzare questo costrutto di selezione.
Come abbiamo già detto l’istruzione di selezione if else permette di fare una scelta. Cioè si effettua un test e se questo è vero si procede con delle istruzioni, altrimenti si procede con delle altre istruzioni.
Quindi se (if) una condizione è vera viene fatta una determinata cosa, altrimenti (else) ne verrà fatta un’altra, se è specificata la condizione else.
Primo esempio di if else in C
Facciamo degli esempi per capire meglio il concetto.
Prendiamo in input due numeri e stabiliamo qual è il maggiore.
Ecco di seguito il codice sviluppato in linguaggio C:
....
if(a>b)
printf("a maggiore di b");
else
printf("a minore di b");
...
Ma l’algoritmo è impreciso in quanto a può anche essere uguale a b. Allora presentiamo una soluzione più accurata.
if(a>b)
printf("a maggiore di b");
else if(a<b)
printf("a minore di b\n");
else
printf("a e b sono uguali");
In questo esempio abbiamo utilizzato l’istruzione if, else if, else in C.
Quindi si valuta innanzitutto se a è maggiore di b. Se ciò risulta essere vero allora si scrive “a maggiore di b” e si salta tutto il resto.
Altrimenti valutiamo se a è minore di b. Se è vero si esegue l’istruzione, cioè si visualizza in output il messaggio “a minore di b“.
Altrimenti, se neanche questa condizione è vera, per cosa ovvia a e b sono uguali e dunque si visualizza in output “a e b sono uguali“.
Esempio completo:
#include <stdio.h>
//esempi di selezione con if else in C
int main ()
{
int a;
int b;
printf ("inserisci a:\n");
scanf("%d", &a);
printf ("inserisci b:\n");
scanf("%d", &b);
//esempio di if con una istruzione
if (a>b)
printf("a maggiore di b");
//esempio di if con uso di più istruzioni per cui
//occorrono le parentesi graffe
if (a>b)
{
printf("questo programma dice:\n ");
printf("a maggiore di b");
}
//esempio di if ...else
if (a>b)
printf("a maggiore di b\n");
else
printf("a non e' maggiore di b\n");
//esempio di if ...else if
if (a>b)
printf("a maggiore di b\n");
else if(a<b)
printf("a e' minore di b\n");
else
printf("a e b sono uguali\n");
system("PAUSE");
}
Questo è solo un esempio di istruzione if else in C, andando avanti nel tutorial affronteremo tanti altri esercizi.
L’istruzione di selezione è uno dei principali costrutti della programmazione imperativa e permette di scegliere fra due strade, in base alla condizione che viene specificata.
In linguaggio C, il costrutto di selezione, viene implementato attraverso l’istruzione if…else, cioè se…altrimenti.
Questo costrutto può presentarsi senza il ramo altrimenti, oppure ci possono essere dei rami if a cascata.
Sintassi Istruzione di selezione
If
La sintassi dell’istruzione if è questa:
if (<Condizione>)
{
<Istruzione/i da eseguire se il valore di Condizione è vera>
}
N.B. Non si usano le parentesi graffe se l’istruzione da eseguire è una sola.
Quindi se la condizione è vera eseguiamo le istruzioni, invece omettiamo di eseguire delle istruzioni se la condizione è falsa. Infatti abbiamo solo un if senza l’else.
Facciamo dunque un esempio:
if (a>b)
printf(“a è maggiore di b”);
Cioè semplicemente se a è maggiore di b, scriviamo “a è maggiore di b”.
Oppure, possono esserci anche più istruzioni, ed in tal caso sono obbligatorie le parentesi graffe:
if (a>b)
{ printf(“questo programma dice: “); printf(“a maggiore di b”); }
if … else
La sintassi dell’istruzione if else è la seguente:
if (<Condizione>)
{
<Istruzione/i da eseguire se il valore di Condizione è true>
}
else
{
<Istruzione/i da eseguire se il valore di Condizione è false>
}
Quindi se la condizione è vera eseguiamo delle istruzioni, altrimenti ne eseguiamo delle altre.
Facciamo quindi un esempio:
if (a>b)
printf(“a è maggiore di b”);
else
printf(“a non è maggiore di b”);
if else if …
La sintassi dell’istruzione if …else if è la seguente:
if (<Condizione>)
{
<Istruzione/i da eseguire se il valore di Condizione è true>
}
else if (<Condizione2>)
{
<Istruzione/i da eseguire se il valore di Condizione è false e Condizione2 è vera>
}
else if (<Condizione3>)
{
<Istruzione/i da eseguire se il valore di Condizione2 è false e Condizione3 è vera>
}
...
else
{
<Istruzione/i da eseguire se il valore di tutte le Condizioni sono false>
}
Facciamo un semplice esempio:
if (a>b)
printf(“a maggiore di b\n”);
else if(a<b)
printf(“a e’ minore di b\n”);
else
printf(“a e b sono uguali\n”);
if annidati
All’interno di un’istruzione if è possibile inserire qualsiasi tipo di istruzione anche una nuova istruzione if, si parla in questo caso di if annidate.