logo

C Declarație Switch

Instrucțiunea switch din C este o alternativă la instrucțiunea ladder if-else-if care ne permite să executăm mai multe operații pentru diferitele valori posibile ale unei singure variabile numite variabilă switch. Aici, putem defini diferite instrucțiuni în mai multe cazuri pentru diferitele valori ale unei singure variabile.

Sintaxa instrucțiunii switch în c limbajul este dat mai jos:

 switch(expression){ case value1: //code to be executed; break; //optional case value2: //code to be executed; break; //optional ...... default: code to be executed if all cases are not matched; } 

Reguli pentru declarația switch în limbajul C

  1. The schimba expresia trebuie să fie de tip întreg sau caracter.
  2. The valoarea cazului trebuie să fie o constantă întreagă sau caracter.
  3. The valoarea cazului poate fi folosit numai în interiorul instrucțiunii switch.
  4. The declarație de pauză în cazul comutatorului nu este obligatoriu. Este optional. Dacă nu există nicio instrucțiune de pauză găsită în caz, toate cazurile vor fi executate prezente după cazul potrivit. Este cunoscut ca cadea prin starea instrucțiunii C switch.

Să încercăm să înțelegem prin exemple. Presupunem că există următoarele variabile.

 int x,y,z; char a,b; float f; 
Comutator validComutator nevalidCaz valabilCaz nevalid
comutator(x)comutator (f)cazul 3;cazul 2.5;
comutați (x>y)comutator(x+2,5)cazul „a”;cazul x;
comutator (a+b-2)cazul 1+2;cazul x+2;
comutator(functie(x,y))cazul 'x'>'y';cazul 1,2,3;

Diagrama de flux a instrucțiunii switch în C

instrucțiunea fluxului de comutare din c

Funcționarea instrucțiunii switch case

În primul rând, este evaluată expresia întreagă specificată în instrucțiunea switch. Această valoare este apoi corelată una câte una cu valorile constante date în diferite cazuri. Dacă se găsește o potrivire, atunci toate instrucțiunile specificate în acel caz sunt executate împreună cu toate cazurile prezente după acel caz, inclusiv instrucțiunea implicită. Nu există două cazuri care pot avea valori similare. Dacă cazul potrivit conține o instrucțiune break, atunci toate cazurile prezente după aceea vor fi sărite și controlul iese din comutator. În caz contrar, toate cazurile care urmează cazului potrivit vor fi executate.

Cum funcționează declarația C switch?

Să trecem prin procesul pas cu pas al modului în care funcționează instrucțiunea switch în C:

Luați în considerare următoarele declarație switch :

Programul C:

 #include int main() { int num = 2; switch (num) { case 1: printf('Value is 1
'); break; case 2: printf('Value is 2
'); break; case 3: printf('Value is 3
'); break; default: printf('Value is not 1, 2, or 3
'); break; } return 0; } 

Ieșire

 Value is 2 

Proces pas cu pas:

  1. The comutator variabila num este evaluat. În acest caz, pe unu este inițializată cu valoarea 2 .
  2. The evaluat num (2) valoare este comparată cu constantele specificate în fiecare etichetă de caz din interiorul bloc comutator .
  3. The declarație switch se potrivește cu valoare evaluată (2) cu constanta specificată în al doilea caz (cazul 2) . Deoarece există o potrivire, programul sare la blocul de cod asociat cu caz potrivit (cazul 2) .
  4. Blocul de cod asociat cu cazul 2 se execută, care se imprimă „Valoarea este 2” la consolă.
  5. The 'pauză' cuvântul cheie este prezent în blocul de cod al cazul 2 . Ca rezultat, programul iese din instrucțiunea switch imediat după executarea blocului de cod.
  6. Controlul programului continuă după declarație switch , și orice declarații care urmează declarație switch sunt executate. În acest caz, nu există instrucțiuni după comutare, așa că programul se termină.
  7. The declarație switch a evaluat valoarea variabila num , a găsit o potrivire cu cazul 2, a executat blocul de cod corespunzător și apoi a ieșit din bloc comutator datorită prezenței declarație „break”. .

Exemplu de instrucțiune switch în C

Să vedem un exemplu simplu de declarație de comutare a limbajului C.

 #include int main(){ int number=0; printf('enter a number:'); scanf('%d',&number); switch(number){ case 10: printf('number is equals to 10'); break; case 50: printf('number is equal to 50'); break; case 100: printf('number is equal to 100'); break; default: printf('number is not equal to 10, 50 or 100'); } return 0; } 

Ieșire

cum să aruncați șir în int în java
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

Exemplu 2 de caz de comutare

 #include int main() { int x = 10, y = 5; switch(x>y && x+y>0) { case 1: printf('hi'); break; case 0: printf('bye'); break; default: printf(' Hello bye '); } } 

Ieșire

 hi 

Pauza și cuvântul cheie implicit în declarația Switch

Să explicăm și să definim 'pauză' și cuvinte cheie „implicite”. în contextul instrucțiunii switch, împreună cu exemplu de cod și ieșire.

1. Rupe cuvânt cheie:

The cuvânt cheie „break”. este utilizat în blocul de cod al fiecărui caz pentru a termina prematur instrucțiunea switch. Când programul întâlnește un declarație „break”. în interiorul unui bloc de carcasă, iese imediat din declarație switch , împiedicând executarea blocurilor de caz ulterioare. The declarație „break”. este esențial pentru evitarea declarațiilor switch' 'cadea prin' comportament.

Exemplu:

Să luăm un program pentru a înțelege utilizarea pauză cheie în C.

 #include int main() { int num = 3; switch (num) { case 1: printf('Value is 1
'); break; // Exit the switch statement after executing this case block case 2: printf('Value is 2
'); break; // Exit the switch statement after executing this case block case 3: printf('Value is 3
'); break; // Exit the switch statement after executing this case block default: printf('Value is not 1, 2, or 3
'); break; // Exit the switch statement after executing the default case block } return 0; } 

Ieșire

 Value is 3 

Explicaţie:

În acest exemplu, declarație switch evaluează valoarea variabila num (care este 3 ) și se potrivește cu cazul 3 . Blocul de cod asociat cu cazul 3 se execută, tipărind „Valoarea este 3” la consolă. The declarație „break”. în cazul 3 asigură că programul iese din instrucțiunea switch imediat după executarea acestui bloc de caz, împiedicând executarea oricăror alte cazuri.

2. Cuvânt cheie implicit:

Când niciunul dintre constante de caz se potrivesc expresie evaluată , funcționează ca a caz-toate . Dacă nu există niciun caz care se potrivește și a cazul „implicit” există , blocul de cod asociat cu 'Mod implicit' cazul este rulat. Este adesea folosit pentru a gestiona circumstanțele în care niciuna dintre situațiile menționate nu se aplică intrării furnizate.

Exemplu:

Să luăm un program pentru a înțelege utilizarea cuvânt cheie implicit în C.

 #include int main() { int num = 5; switch (num) { case 1: printf('Value is 1
'); break; case 2: printf('Value is 2
'); break; case 3: printf('Value is 3
'); break; default: printf('Value is not 1, 2, or 3
'); break; // Exit the switch statement after executing the default case block } return 0; } 

Ieșire

 Value is not 1, 2, or 3 

Explicaţie:

În acest exemplu, declarație switch examinează valoarea variabila num (care este 5 ). Deoarece niciun caz nu se potrivește cu num, programul execută blocul de cod asociat cu caz „implicit”. . The declarație „break”. în interiorul caz „implicit”. se asigură că programul iese din declarație switch după executarea 'Mod implicit' bloc de caz.

Amandoua 'pauză' și cuvinte cheie „implicite”. joacă roluri esențiale în controlul fluxului de execuție în cadrul unei instrucțiuni switch. The declarație „break”. ajută la prevenirea comportamentului de cădere, în timp ce caz „implicit”. oferă o modalitate de a gestiona cazuri nepotrivite.

Declarația C Switch este de tip fall-through

În limbajul C, instrucțiunea switch este fall through; înseamnă că dacă nu utilizați o instrucțiune break în cazul switch, toate cazurile de după cazul potrivit vor fi executate.

Să încercăm să înțelegem starea de cădere a declarației de comutare prin exemplul de mai jos.

 #include int main(){ int number=0; printf('enter a number:'); scanf('%d',&number); switch(number){ case 10: printf('number is equal to 10
'); case 50: printf('number is equal to 50
'); case 100: printf('number is equal to 100
'); default: printf('number is not equal to 10, 50 or 100'); } return 0; } 

Ieșire

 enter a number:10 number is equal to 10 number is equal to 50 number is equal to 100 number is not equal to 10, 50 or 100 

Ieșire

 enter a number:50 number is equal to 50 number is equal to 100 number is not equal to 10, 50 or 100 

Declarație imbricată switch case

Putem folosi câte instrucțiuni switch dorim în interiorul unei instrucțiuni switch. Un astfel de tip de instrucțiuni se numește instrucțiuni de tip switch case imbricate. Luați în considerare următorul exemplu.

 #include int main () { int i = 10; int j = 20; switch(i) { case 10: printf('the value of i evaluated in outer switch: %d
',i); case 20: switch(j) { case 20: printf('The value of j evaluated in nested switch: %d
',j); } } printf('Exact value of i is : %d
', i ); printf('Exact value of j is : %d
', j ); return 0; } 

Ieșire

 the value of i evaluated in outer switch: 10 The value of j evaluated in nested switch: 20 Exact value of i is : 10 Exact value of j is : 20 

Avantajele declarației switch:

Există mai multe avantaje ale declarație switch în C. Câteva avantaje principale ale instrucțiunii switch sunt următoarele:

    Lizibilitate și claritate:The declarație switch oferă un mod concis și simplu de exprimare ramificare pe mai multe căi în cod. Tratarea mai multor cazuri poate face codul mai organizat și mai ușor de citit decât mai multe instrucțiuni if-else imbricate .Eficienţă:The declarație switch este în general mai eficient decât o serie de declarații dacă-altfel atunci când se confruntă cu mai multe condiții. Funcționează ca un d masa de sărituri directe , ceea ce îl face mai rapid și mai optimizat în ceea ce privește timpul de execuție.Logica bazata pe cazuri:The declarație switch se potrivește în mod natural scenariilor în care programul trebuie să ia decizii pe baza unor valori specifice ale unei singure variabile. Este o modalitate intuitivă și simplă de a implementa logica bazată pe cazuri.

The declarație switch acceptă utilizarea unui caz implicit care servește ca a opțiunea prinde toate pentru valori care nu se potrivesc cu niciun caz furnizat. Acest caz implicit gestionează intrări neobișnuite sau circumstanțe care nu sunt menționate în mod expres.

Dezavantajele declarației switch:

Există mai multe dezavantaje ale declarație switch în C. Unele dezavantaje principale ale instrucțiunii switch sunt următoarele:

    Expresii limitate:Expresia folosită în declarație switch trebuie să rezulte o valoare integrală (char, int, enum) sau un tip de date compatibil. Nu se poate descurca mai mult expresii complexe sau non-constante , limitându-i flexibilitate în unele scenarii.Incapacitatea de a compara intervale:Spre deosebire de declarații dacă-altfel , cel declarație switch nu poate gestiona direct intervale de valori. Fiecare caz din instrucțiunea switch reprezintă o anumită valoare constantă, ceea ce face dificilă gestionarea eficientă a unei game de valori.Nu există suport pentru numere în virgulă mobilă:The declarație switch doar accepta tipuri de integrale (numere întregi) si valori din enumerari ; nu acceptă numere în virgulă mobilă. Nu se descurcă tipuri de date non-integrale ca numere întregi în virgulă mobilă , care ar putea fi problematic în anumite circumstanțe.Comportament de cădere: Declarații de comutare avea 'cadea prin' comportament implicit care implică faptul că dacă un caz nu include a declarație „break”. , executarea va 'cadea prin' la următorul bloc de caz. Dacă nu este gestionat corespunzător, acest lucru poate duce la un comportament nedorit.Cod duplicat:Folosind un declarație switch ar putea avea ca rezultat codul duplicat în anumite circumstanțe, mai ales atunci când numeroase cazuri necesită aceleași acțiuni. Dacă nu este gestionat corespunzător, acest lucru poate duce la duplicarea codului.Comutatoarele imbricate pot deveni complexe:Când ai de-a face cu cuibărit declarații de comutare , codul poate deveni complex și mai puțin lizibil. Poate necesita efort suplimentar pentru a înțelege și menține astfel de structuri imbricate.