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: