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.

  • 🔀 Ramificazioni multiple: Un'istruzione switch verifica un'espressione e salta all'etichetta del caso corrispondente.
  • 🏷️ Etichette della custodia: Ciascun caso utilizza un'etichetta univoca, composta da un numero intero costante o da un carattere, che termina con due punti.
  • ⛔ Parola chiave di interruzione: L'istruzione break termina un caso; senza di essa, l'esecuzione fallisce.
  • 🧩 Caso predefinito: Il blocco predefinito opzionale viene eseguito quando nessuna etichetta case corrisponde all'espressione.
  • 📋 Regole di commutazione: Le etichette delle custodie rimangono costanti e univoche, con una sola etichetta predefinita consentita.

Istruzione Switch in C

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:

Diagramma di flusso dell'istruzione Switch

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

Esempio di cambio caso in C

  1. Nel programma dato abbiamo inizializzato un variabile num con valore 8.
  2. Un costrutto switch viene utilizzato per confrontare il valore memorizzato nella variabile num ed eseguire il blocco di istruzioni associato al caso corrispondente.
  3. 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

Switch nidificato in C

  1. Nel programma fornito abbiamo inizializzato due variabili: ID e password.
  2. 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).
  3. 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).
  4. 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.

DOMANDE FREQUENTI

L'interruttore AC accetta solo valori di tipo int, char ed enum, mai float o stringhe, poiché ogni etichetta deve essere un numero intero costante.

Senza interruzione, il controllo fallisce e si verifica anche in tutti i casi successivi, a volte intenzionalmente, ma di solito si tratta di un bug accidentale.

No. Il linguaggio C non può eseguire switch sulle stringhe; le etichette devono essere numeri interi costanti. Confronta il testo con strcmp all'interno di un'istruzione if-else.

Lo standard C vieta gli intervalli, sebbene GCC consenta un caso non portabile 1 … 5: estensione che il codice portabile dovrebbe evitare.

No. Il caso predefinito può trovarsi ovunque; viene eseguito solo quando nessuna etichetta corrisponde. L'ultimo posizionamento è solo una convenzione.

Sì, ma racchiudi il corpo del case tra parentesi graffe; altrimenti una dichiarazione dopo un'etichetta può generare errori di compilazione.

Sì. Gli assistenti di programmazione basati sull'IA creano blocchi switch, aggiungono ogni interruzione e segnalano eventuali fallthrough accidentali. È sempre necessario rivedere la logica generata.

Copilota GitHub Completa automaticamente le etichette dei casi, inserisce le istruzioni break e converte lunghe catene di if-else in un'istruzione switch da un commento.

Riassumi questo post con: