switch...case in C (istruzione Switch in C) con esempi
โก Riepilogo intelligente
L'istruzione switch in C confronta un'espressione con piรน etichette case ed esegue il blocco corrispondente, offrendo un'alternativa piรน pulita alle lunghe catene di if-else quando un programma deve scegliere tra molti valori interi o caratteri fissi.

Cos'รจ l'istruzione Switch in C?
L'istruzione switch in C verifica il valore di una variabile e lo confronta con piรน casi. Una volta trovato un caso corrispondente, viene eseguito un blocco di istruzioni associato a quel caso specifico.
Ciascun caso in un blocco di uno switch ha un nome/numero diverso che viene definito identificatore. Il valore fornito dall'utente viene confrontato con tutti i casi all'interno del blocco switch finchรฉ non viene trovata la corrispondenza.
Se NON viene trovata una corrispondenza case, viene eseguita l'istruzione predefinita e il controllo esce dal blocco switch.
Sintassi maiuscole/minuscole
Una sintassi generale di come viene implementato switch-case in un programma 'C' รจ la seguente:
switch( expression ) { case value-1: Block-1; Break; case value-2: Block-2; Break; case value-n: Block-n; Break; default: Block-1; Break; } Statement-x;
- L'espressione puรฒ essere un'espressione intera o un'espressione di caratteri.
- Valore-1, 2, n sono etichette del caso utilizzate per identificare ciascun caso individualmente. Ricorda che le etichette dei casi non dovrebbero essere le stesse poichรฉ potrebbero creare problemi durante l'esecuzione di un programma. Supponiamo di avere due casi con la stessa etichetta di "1". Quindi durante l'esecuzione del programma, il caso che appare per primo verrร eseguito anche se si desidera che il programma esegua un secondo caso. Ciรฒ crea problemi nel programma e non fornisce l'output desiderato.
- Le etichette delle maiuscole terminano sempre con i due punti (:). Ognuno di questi casi รจ associato ad un blocco.
- Un blocco non รจ altro che piรน istruzioni raggruppate per un caso particolare.
- Ogni volta che viene eseguito lo switch, il valore di test-expression viene confrontato con tutti i casi che abbiamo definito all'interno dello switch. Supponiamo che l'espressione di test contenga il valore 4. Questo valore viene confrontato con tutti i casi fino al caso la cui etichetta quattro viene trovata nel programma. Non appena viene trovato un caso, viene eseguito il blocco di istruzioni associato a quel particolare caso e il controllo scompare dallo switch.
- La parola chiave break in ciascun caso indica la fine di un caso particolare. Se non inseriamo l'interruzione in ogni caso, anche se viene eseguito il caso specifico, lo switch in C continuerร ad eseguire tutti i casi fino al raggiungimento della fine. Ciรฒ non dovrebbe accadere; quindi dobbiamo sempre inserire la parola chiave break in ogni caso. Break terminerร il caso una volta eseguito e il controllo cadrร dallo switch.
- Il caso predefinito รจ facoltativo. Ogni volta che il valore di test-expression non corrisponde a nessuno dei casi all'interno dello switch, verrร eseguito il default. Altrimenti, non รจ necessario scrivere default nello switch.
- Una volta eseguito lo switch, il controllo passerร all'istruzione-x e l'esecuzione di un programma continuerร .
Diagramma di flusso dell'istruzione Switch
Il diagramma seguente illustra come viene selezionato un caso in switch case:
Come funziona il passaggio
Esempio di cambio caso in C
Il programma seguente illustra l'uso dello switch:
#include <stdio.h> int main() { int num = 8; switch (num) { case 7: printf("Value is 7"); break; case 8: printf("Value is 8"); break; case 9: printf("Value is 9"); break; default: printf("Out of range"); break; } return 0; }
Produzione:
Value is 8
- Nel programma dato abbiamo inizializzato un variabile num con valore 8.
- Un costrutto switch viene utilizzato per confrontare il valore memorizzato nella variabile num ed eseguire il blocco di istruzioni associato al caso corrispondente.
- In questo programma, poichรฉ il valore memorizzato nella variabile num รจ otto, uno switch eseguirร il caso la cui etichetta case รจ 8. Dopo aver eseguito il caso, il controllo uscirร dallo switch e il programma verrร terminato con il risultato positivo di stampando il valore sulla schermata di output.
Prova a modificare il valore della variabile num e nota il cambiamento nell'output.
Ad esempio, consideriamo il seguente programma che per impostazione predefinita:
#include <stdio.h> int main() { int language = 10; switch (language) { case 1: printf("C#\n"); break; case 2: printf("C\n"); break; case 3: printf("C++\n"); break; default: printf("Other programming language\n");}}
Produzione:
Other programming language
Quando si lavora con switch case in C, si raggruppano piรน casi con etichette univoche. ร necessario introdurre un'istruzione break in ogni caso per ramificarsi alla fine di un'istruzione switch.
Il caso predefinito facoltativo viene eseguito quando non vengono effettuate altre corrispondenze.
Consideriamo la seguente istruzione switch:
#include <stdio.h> int main() { int number=5; switch (number) { case 1: case 2: case 3: printf("One, Two, or Three.\n"); break; case 4: case 5: case 6: printf("Four, Five, or Six.\n"); break; default: printf("Greater than Six.\n");}}
Produzione:
Four, Five, or Six.
Switch nidificato in C
In C, possiamo avere un interruttore interno incorporato in un interruttore esterno. Inoltre, le costanti case dell'interruttore interno ed esterno possono avere valori comuni e senza conflitti.
Consideriamo il seguente programma, che chiede all'utente di digitare il proprio ID. Se l'ID รจ valido, gli verrร chiesto di inserire la password; se la password รจ corretta, il programma stamperร il nome dell'utente, altrimenti stamperร "Password errata"; e se l'ID non esiste, il programma stamperร "ID errato".
#include <stdio.h> int main() { int ID = 500; int password = 000; printf("Plese Enter Your ID:\n "); scanf("%d", & ID); switch (ID) { case 500: printf("Enter your password:\n "); scanf("%d", & password); switch (password) { case 000: printf("Welcome Dear Programmer\n"); break; default: printf("incorrect password"); break; } break; default: printf("incorrect ID"); break; } }
Produzione:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- Nel programma fornito abbiamo inizializzato due variabili: ID e password.
- Viene utilizzata una struttura switch esterna per confrontare il valore inserito nella variabile ID. Essa esegue il blocco di istruzioni associato al caso corrispondente (quando ID==500).
- Se l'istruzione di blocco viene eseguita con il caso corrispondente, viene utilizzato uno switch interno per confrontare i valori inseriti nella variabile password ed eseguire le istruzioni collegate al caso corrispondente (quando password==000).
- In caso contrario, il caso switch attiverร il caso predefinito e stamperร il testo appropriato relativo allo schema del programma.
Perchรฉ abbiamo bisogno di una custodia Switch?
C'รจ un potenziale problema con istruzione if-else che รจ la complessitร del programma aumenta ogni volta che aumenta il numero di percorsi alternativi. Se si utilizzano piรน costrutti if-else nel programma, un programma potrebbe diventare difficile da leggere e comprendere. A volte potrebbe persino confondere lo sviluppatore che ha scritto lui stesso il programma.
La soluzione a questo problema รจ l'istruzione switch.
Regole per l'istruzione switch
Segui queste regole quando scrivi un'istruzione switch in C:
- Un'espressione deve sempre essere eseguita per ottenere un risultato.
- Le etichette dei casi devono essere costanti e univoche.
- Le etichette delle maiuscole devono terminare con i due punti (:).
- In ogni caso deve essere presente una parola chiave break.
- Puรฒ essere presente una sola etichetta predefinita.
- Possiamo annidare piรน istruzioni switch.



