switch...case in C (istruzione Switch in C) con esempi

Cos'è l'istruzione Switch in C?

Dichiarazione di cambio in C testa il valore di una variabile e lo confronta con più casi. Una volta trovata la corrispondenza del caso, viene eseguito un blocco di istruzioni associato a quel caso particolare.

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 indicato abbiamo spiegato a 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 in cui l'utente digita il proprio ID, se l'ID è valido gli verrà chiesto di inserire la sua password, se la password è corretta il programma stamperà il nome dell'utente, altrimenti, il programma stamperà la password errata e se l'ID non esiste, il programma stamperà l'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 indicato abbiamo spiegato due variabili inizializzate: ID e password
  2. Un costrutto di interruttore esterno viene utilizzato per confrontare il valore immesso nella variabile ID. 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 un interruttore interno per confrontare i valori immessi 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

  • 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.

Sintesi

  • Un interruttore è un costrutto decisionale in 'C. '
  • Un interruttore viene utilizzato in un programma in cui sono coinvolte più decisioni.
  • Uno switch deve contenere un'espressione di test eseguibile.
  • Ogni caso deve includere una parola chiave break.
  • L'etichetta del caso deve essere costante e univoca.
  • L'impostazione predefinita è facoltativa.
  • È possibile annidare più istruzioni switch l'una nell'altra.

Riassumi questo post con: