vuoi
o PayPal
tutte le volte che vuoi
Istruzione switch
L’istruzione switch può essere usata con il linguaggio di programmazione C e C++.
É un istruzione che può far evitare l’uso di molte “if”, così da rendere il programma più facile da vedere in caso ci dovessero essere degli errori.
Es.
Switch (a)
{
Case v1:
A1;
break;
default:
B1;
}
l'espressione (a) può essere una variabile oppure un'espressione aritmetica.
"Case v1" è come scrivere "if", per esempio quando viene premuto il tasto "1". In questo caso passa al livello successivo e compie l'azione desiderata, come fare un calcolo e visualizzare un messaggio.
Non bisogna mai dimenticare di scrivere "break", perché impedisce di passare al caso successivo in caso ce ne fosse un altro.
Il "default" invece rappresenta una "else", che viene eseguito in caso si dovesse sbagliare la digitazione del tasto desiderato.
Come per il cicli anche l'istruzione switch è racchiusa all'interno di due parentesi graffe, una che apre e una che chiude.
É un'istruzione che può essere usata per creare un semplice programma in cui si possa eseguire una somma di due numeri interi.
Esempio:
switch(operazione)
{
case 1:
c=a+b;
break;
La spiegazione completa si trova nel file in pdf da scaricare, con un esercizio e la soluzione per verificare lo svolgimento dell’esercizio.
switch
Istruzione
Sintassi dell’istruzione
Particolarità dell’istruzione
Esercizio proposto
Verifica della soluzione
Scelte ed alternative 2
Scelte multiple
if( mese == 1 )
if
Quando occorre printf("Gennaio\n") ;
compiere una if( mese == 2 )
else if
printf("Febbraio\n") ;
sequenza di scelte, in else if( mese == 3 )
if
printf("Marzo\n") ;
funzione del valore di else if( mese == 4 )
if
printf("Aprile\n") ;
una variabile, occorre else if( mese == 5 )
if
if-
una catena di printf("Maggio\n") ;
switch ............................
Istruzione else else if( mese == 9 )
if
printf("Settembre\n") ;
Lo stesso risultato si else if( mese == 10 )
if
printf("Ottobre\n") ;
può ottenere in forma else if( mese == 11 )
if
printf("Novembre\n") ;
più compatta else if( mese == 12 )
if
mediante l’istruzione printf("Dicembre\n") ;
else
switch printf("MESE ERRATO!\n") ;
4
switch
Sintassi istruzione Precisazioni (1/2)
switch ( e )
{ e
L’espressione può essere una variabile oppure
case v1: un’espressione aritmetica
e=...
A1 ; int, char enum
Il tipo di dato deve essere o
e=v1 e=v2 altrimenti
break ; e=v3 Ciascun caso è identificato da una costante
A1
case v2: e
L’espressione viene confrontata con il valore
A2
A2 ; v1...vn
delle costanti
A3
break ; Il tipo di dato deve essere compatibile
...
case v3: case...break
Ciascun caso è delimitato da
An
A3 ; {...}
Non vi sono parentesi graffe
break ;
...........
default:
default
An ; 5 6
} break
Precisazioni (2/2) L’istruzione
break
Il significato di è di portare l’esecuzione
I casi possono apparire in qualsiasi ordine del programma fino al termine del costrutto
Devono essere tutti diversi switch
Verrà selezionato al più un caso }
“Salta alla chiusa graffa”:
default
Il caso viene valutato se e solo se break,
In assenza di l’esecuzione proseguirebbe
nessuno degli altri casi è stato considerato attraverso il caso successivo
Opzionale, ma sempre consigliato case,
Né il prossimo né eventuali parentesi graffe,
possono fermare l’esecuzione lineare
7 8
Casi multipli Esempio
switch( mese )
switch
{
Potrebbe essere necessario eseguire lo stesso case 1:
codice in corrispondenza di diversi valori printf("Gennaio\n") ; mesi3.c
break ;
dell’espressione case 2:
printf("Febbraio\n") ;
È possibile accomunare più casi, indicandoli break ;
consecutivamente case 3:
printf("Marzo\n") ;
switch( ora )
switch break ;
{ case 4:
switch(
switch ora ) printf("Aprile\n") ;
case 12: { break ;
pranzo = 1 ; case 12: ..............................
break;
break case 13: case 12:
case 13: pranzo = 1 ; printf("Dicembre\n") ;
pranzo = 1 ; break ;
break;
break
break;
break default:
default
}
} printf("MESE ERRATO!\n") ;
9 10
} Istruzione atipica
switch
L’istruzione è anomala sotto diversi punti
di vista:
Non utilizza le parentesi graffe per l’annidamento
delle istruzioni interne
Prevede solamente il controllo di uguaglianza
e==v
switch
Istruzione Richiede che i valori da confrontare siano costanti
break default
e sono opzionali
Occorre una forte disciplina nell’utilizzarla
correttamente! 12
Errore frequente Errore frequente
switch( ora )
switch
{
È errato dimenticare È errato utilizzare variabili come valori dei singoli
case 12: case
break
l’istruzione al pranzo = 1 ;
case 20:
termine di ogni caso Se non è possibile usare costanti, allora utilizzare
cena = 1 ;
break;
break if-else
delle catene di
}
viene interpretato come forma corretta
forma corretta
switch( ora )
switch switch( ora ) switch( ora )
switch switch
{ if( ora==orapranzo )
if
{ {
case 12: {
case 12: case orapranzo: pranzo = 1 ;
pranzo = 1 ; pranzo = 1 ; pranzo = 1 ; }
cena = 1 ; break;
break break;
break
break; else if( ora==oracena )
break if
case 20: case oracena:
case 20: {
cena = 1 ; cena = 1 ;
cena = 1 ; cena = 1 ;
break; break;
break break
break; }
break } }
13 14
} Errore frequente Suggerimento
default
Utilizzare sempre l’istruzione
È errato pensare di poter fare confronti di ordine,
o confronti multipli Anche se non vi è ragione apparente, è
if-else
Utilizzare sequenze di opportuno che il programma intercetti valori
errati della variabile
else if
Non usare se i casi non sono
mutuamente esclusivi
forma corretta switch( ora )
switch
{
switch( ora )
switch if( ora<12 )
if ......
{ {
case <12: mattino = 1 ; default:
default
mattino = 1 ; } printf("Errore: valore inatteso
break;
break if( ora==12 || 20 )
if %d per la variabile ora\n", ora) ;
case 12 || 20: { }
pasti = 1 ; pasti = 1 ;
break;
break } 15 16
} Suggerimento
default
Posizionare l’istruzione come ultimo
switch
caso dello
Potrebbe stare ovunque
Maggiore leggibilità
break
L’istruzione finale si può omettere switch
Istruzione
17