comutați...case în C (Switch Statement în C) cu Exemple

⚡ Rezumat inteligent

Instrucțiunea Switch în C compară o expresie cu mai multe etichete de caz și rulează blocul corespondent, oferind o alternativă mai curată la lanțurile lungi if-else atunci când un program trebuie să aleagă între mai multe valori fixe de tip întreg sau caracter.

  • 🔀 Ramificare multidirecțională: Un comutator testează o expresie și sare la eticheta de caz corespunzătoare.
  • 🏷️ Etichete carcase: Fiecare caz folosește o etichetă unică de număr întreg sau caracter constantă care se termină prin două puncte.
  • Cuvânt cheie Break: Instrucțiunea break încheie un caz; fără ea, execuția eșuează.
  • 🧩 Caz implicit: Blocul opțional implicit rulează atunci când nicio etichetă de caz nu corespunde expresiei.
  • 📋 Reguli de schimbare: Etichetele cazurilor rămân constante și unice, fiind permisă o singură etichetă implicită.

Instrucțiunea Switch în C

Ce este Declarația Switch în C?

Instrucțiunea Switch în C testează valoarea unei variabile și o compară cu mai multe cazuri. Odată ce se găsește potrivirea cazului, se execută un bloc de instrucțiuni asociate cu acel caz particular.

Fiecare caz dintr-un bloc al unui comutator are un nume/număr diferit, care este denumit un identificator. Valoarea furnizată de utilizator este comparată cu toate cazurile din interiorul blocului de comutare până când se găsește potrivirea.

Dacă NU este găsită o potrivire de caz, atunci instrucțiunea implicită este executată și controlul iese din blocul de comutare.

Comutați sintaxa majusculelor

O sintaxă generală a modului în care switch-case este implementată într-un program „C” este următoarea:

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;
  • Expresia poate fi o expresie întreagă sau o expresie de caracter.
  • Valoarea-1, 2, n sunt etichete de caz care sunt folosite pentru a identifica fiecare caz individual. Amintiți-vă că etichetele de caz nu ar trebui să fie aceleași, deoarece ar putea crea o problemă în timpul executării unui program. Să presupunem că avem două cazuri cu aceeași etichetă ca „1”. Apoi, în timpul executării programului, cazul care apare primul va fi executat chiar dacă doriți ca programul să execute un al doilea caz. Acest lucru creează probleme în program și nu oferă rezultatul dorit.
  • Etichetele cazurilor se termină întotdeauna cu două puncte ( : ). Fiecare dintre aceste cazuri este asociat cu un bloc.
  • Un bloc nu este altceva decât mai multe instrucțiuni care sunt grupate pentru un anumit caz.
  • Ori de câte ori se execută comutatorul, valoarea expresiei test este comparată cu toate cazurile pe care le-am definit în interiorul comutatorului. Să presupunem că expresia de test conține valoarea 4. Această valoare este comparată cu toate cazurile până la caz a cărui etichetă patru este găsită în program. De îndată ce este găsit un caz, blocul de instrucțiuni asociat cu acel caz particular este executat și controlul iese din comutator.
  • Cuvântul cheie break indică în fiecare caz sfârșitul unui anumit caz. Dacă nu punem pauză în fiecare caz, atunci chiar dacă cazul specific este executat, comutatorul din C va continua să execute toate cazurile până când se ajunge la final. Acest lucru nu ar trebui să se întâmple; prin urmare, trebuie să punem întotdeauna cuvântul cheie break în fiecare caz. Break va încheia cazul odată ce acesta este executat și controlul va cădea din comutator.
  • Cazul implicit este unul opțional. Ori de câte ori valoarea expresiei de testare nu se potrivește cu niciunul dintre cazurile din interiorul comutatorului, atunci implicit va fi executat. În caz contrar, nu este necesar să scrieți implicit în comutator.
  • Odată ce comutatorul este executat, controlul va merge la instrucțiunea-x, iar execuția unui program va continua.

Diagramă de flux al declarației de comutare

Următoarea diagramă ilustrează cum este selectată un caz în cazul comutatorului:

Diagramă de flux al declarației de comutare

Cum funcționează Switch

Exemplu de comutare a cazului în C

Următorul program ilustrează utilizarea comutatorului:

#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;
    }

ieșire:

Value is 8

Exemplu de comutare a cazului în C

  1. În programul dat am inițializat un variabil num cu valoarea 8.
  2. O construcție de comutare este utilizată pentru a compara valoarea stocată în variabila num și pentru a executa blocul de instrucțiuni asociate cu cazul potrivit.
  3. În acest program, deoarece valoarea stocată în variabila num este opt, un comutator va executa cazul a cărui etichetă de caz este 8. După executarea cazului, controlul va cădea din comutator și programul va fi terminat cu rezultatul de succes prin imprimarea valorii pe ecranul de ieșire.

Încercați să modificați valoarea variabilei num și observați modificarea rezultatului.

De exemplu, luăm în considerare următorul program care este implicit:

#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");}}

ieșire:

Other programming language

Când lucrați cu comutatorul casei în C, grupați mai multe cazuri cu etichete unice. Trebuie să introduceți o instrucțiune break în fiecare caz pentru a se ramifica la sfârșitul unei instrucțiuni switch.

Cazul implicit opțional rulează atunci când nu se fac alte potriviri.

Luăm în considerare următoarea declarație de comutare:

#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");}}

ieșire:

Four, Five, or Six.

Comutator imbricat în C

In C, putem avea un comutator interior încorporat într-un comutator exterior. De asemenea, constantele de caz ale comutatorului interior și exterior pot avea valori comune și fără conflicte.

Considerăm următorul program, care solicită utilizatorului să își introducă propriul ID. Dacă ID-ul este valid, acesta va solicita introducerea parolei; dacă parola este corectă, programul va afișa numele utilizatorului, altfel va afișa Parolă incorectă; iar dacă ID-ul nu există, programul va afișa ID incorect.

#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;
        }
}

ieșire:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

Comutator imbricat în C

  1. În programul dat am inițializat două variabile: ID-ul și parola.
  2. O construcție de comutare externă este utilizată pentru a compara valoarea introdusă în variabila ID. Aceasta execută blocul de instrucțiuni asociat cazului potrivit (când ID==500).
  3. Dacă instrucțiunea bloc este executată cu cazul potrivit, se utilizează un comutator intern pentru a compara valorile introduse în variabila password și a executa instrucțiunile legate de cazul potrivit (când password==000).
  4. În caz contrar, cazul comutatorului va declanșa cazul implicit și va tipări textul corespunzător cu privire la schița programului.

De ce avem nevoie de o carcasă Switch?

Există o problemă potențială cu declarație dacă-altfel care este complexitatea programului crește ori de câte ori crește numărul de căi alternative. Dacă utilizați mai multe constructe if-else în program, un program poate deveni dificil de citit și de înțeles. Uneori poate chiar deruta dezvoltatorul care a scris el însuși programul.

Soluția la această problemă este declarația switch.

Reguli pentru declarația de comutare

Urmați aceste reguli atunci când scrieți un switch în C:

  • O expresie trebuie să se execute întotdeauna la un rezultat.
  • Etichetele cazului trebuie să fie constante și unice.
  • Etichetele de caz trebuie să se încheie cu două puncte ( : ).
  • Un cuvânt cheie break trebuie să fie prezent în fiecare caz.
  • Poate exista o singură etichetă implicită.
  • Putem imbrica mai multe instrucțiuni switch.

Întrebări frecvente

Comutatorul AC acceptă doar valori int, char și enum — niciodată numere cu număr mobil sau șiruri de caractere, deoarece fiecare etichetă trebuie să fie un număr întreg constant.

Fără întrerupere, controlul se pierde și rulează și în fiecare caz ulterior — uneori intenționat, dar de obicei o eroare accidentală.

Nu. C nu poate activa șiruri de caractere; etichetele trebuie să fie numere întregi constante. Comparați textul cu strcmp din interiorul if-else.

Standardul C interzice intervalele, deși GCC permite o extensie neportabilă în cazul 1 … 5: pe care codul portabil ar trebui să o evite.

Nu. Cazul implicit poate fi plasat oriunde; rulează doar atunci când nicio etichetă nu se potrivește. Ultima plasare este doar o convenție.

Da, dar înfășurați corpul cazului între acolade; altfel, o declarație după o etichetă poate declanșa erori de compilare.

Da. Asistenții de codare bazați pe inteligență artificială creează blocuri de comutare, adaugă fiecare întrerupere și semnalează căderile accidentale. Revizuiește întotdeauna logica generată.

Copilotul GitHub completează automat etichetele cazurilor, inserează instrucțiuni break și convertește lanțurile lungi if-else într-un comutator dintr-un comentariu.

Rezumați această postare cu: