logo

C Switch Statement

Switch-satsen i C är en alternativ till if-else-if ladder-sats som gör att vi kan utföra flera operationer för de olika möjliga värdena för en enda variabel som kallas switch-variabel. Här kan vi definiera olika uttalanden i flera fall för de olika värdena för en enskild variabel.

Syntaxen för switch-satsen i c språk ges nedan:

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

Regler för switch-sats på C-språk

  1. De byta uttryck måste vara av heltals- eller teckentyp.
  2. De fallvärde måste vara ett heltal eller teckenkonstant.
  3. De fallvärde kan endast användas i switch-satsen.
  4. De bryta uttalande i växellåda är inte måste. Det är valfritt. Om det inte finns någon paussats i ärendet, kommer alla fall att verkställas efter det matchade ärendet. Det är känt som falla igenom tillståndet för C-switch-satsen.

Låt oss försöka förstå det med exemplen. Vi antar att det finns följande variabler.

 int x,y,z; char a,b; float f; 
Giltig switchOgiltig switchGiltigt fallOgiltigt fall
switch (x)switch (f)fall 3;fall 2.5;
switch(x>y)switch(x+2,5)fall 'a';fall x;
switch(a+b-2)fall 1+2;fall x+2;
switch(func(x,y))fall 'x'>'y';fall 1,2,3;

Flödesschema för växlingsförklaring i C

flöde av switch-sats i c

Funktion av växelfallsförklaring

Först utvärderas heltalsuttrycket som anges i switch-satsen. Detta värde matchas sedan ett efter ett med de konstanta värden som anges i de olika fallen. Om en matchning hittas exekveras alla satser som anges i det fallet tillsammans med alla fall som finns efter det fallet inklusive standardsatsen. Inga två fall kan ha liknande värden. Om det matchade fallet innehåller en break-sats, kommer alla fall som finns efter det att hoppas över, och kontrollen kommer ut ur switchen. Annars kommer alla ärenden efter det matchade fallet att verkställas.

Hur fungerar C switch-satsen?

Låt oss gå igenom steg-för-steg-processen för hur switch-satsen fungerar i C:

Tänk på följande byta uttalande :

C-program:

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

Produktion

 Value is 2 

Steg-för-steg process:

  1. De växla variabel num utvärderas. I detta fall, på ett initieras med värde 2 .
  2. De utvärderat num (2) värde jämförs med de konstanter som anges i varje falletikett inuti brytarblock .
  3. De byta uttalande matchar utvärderat värde (2) med den konstant som anges i andra fallet (fall 2) . Eftersom det finns en matchning, hoppar programmet till kodblocket som är associerat med matchande fodral (fall 2) .
  4. Kodblocket associerat med fall 2 exekveras, som skriver ut 'Värdet är 2' till konsolen.
  5. De 'ha sönder' nyckelordet finns i kodblocket för fall 2 . Som ett resultat bryter programmet ut ur switch-satsen omedelbart efter exekvering av kodblocket.
  6. Programkontrollen fortsätter efter byta uttalande , och alla uttalanden som följer byta uttalande avrättas. I det här fallet finns det inga uttalanden efter växlingen, så programmet avslutas.
  7. De byta uttalande utvärderade värdet av variabel num , hittade en matchning med fall 2, körde motsvarande kodblock och avslutade sedan brytarblock på grund av närvaron av 'bryta' uttalande .

Exempel på en switch-sats i C

Låt oss se ett enkelt exempel på en C language switch-sats.

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

Produktion

3d i autocad
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

Switch case exempel 2

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

Produktion

 hi 

Break och Default nyckelord i Switch-satsen

Låt oss förklara och definiera 'ha sönder' och 'standard' nyckelord i sammanhanget med switch-satsen, tillsammans med exempelkod och utdata.

1. Avbrottssökord:

De 'bryta' nyckelord används inom kodblocket för varje fall för att avsluta switch-satsen i förtid. När programmet stöter på en 'bryta' uttalande inuti ett fallblock lämnar det omedelbart byta uttalande , förhindrar exekvering av efterföljande ärendeblock. De 'bryta' uttalande är avgörande för att undvika switch-satser 'falla igenom' beteende.

Exempel:

Låt oss ta ett program för att förstå användningen av bryt nyckelord i 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; } 

Produktion

 Value is 3 

Förklaring:

I det här exemplet är byta uttalande utvärderar värdet av variabel num (vilket är 3 ) och matchar den med fall 3 . Kodblocket associerat med fall 3 exekveras, utskrift 'Värdet är 3' till konsolen. De 'bryta' uttalande inom fall 3 säkerställer att programmet lämnar switch-satsen omedelbart efter exekvering av detta fallblock, vilket förhindrar exekvering av andra fall.

2. Standardsökord:

När ingen av de fallkonstanter matcha utvärderat uttryck , den fungerar som en catch-all fall . Om det inte finns något matchande fall och a 'standard' fall finns , kodblocket som är associerat med 'standard' ärendet körs. Det används ofta för att hantera omständigheter där ingen av de angivna situationerna gäller den tillhandahållna inmatningen.

Exempel:

Låt oss ta ett program för att förstå användningen av standardsökord i 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; } 

Produktion

 Value is not 1, 2, or 3 

Förklaring:

I det här exemplet är byta uttalande undersöker värdet av variabel num (vilket är 5 ). Eftersom inget fall matchar numret, utför programmet kodblocket som är associerat med 'standard' fall . De 'bryta' uttalande inuti 'standard' fall säkerställer att programmet avslutas byta uttalande efter att ha utfört 'standard' fallblock.

Både 'ha sönder' och 'standard' nyckelord spelar viktiga roller för att kontrollera flödet av exekvering inom en switch-sats. De 'bryta' uttalande hjälper till att förhindra genombrottsbeteende, medan 'standard' fall ger ett sätt att hantera oöverträffade fall.

C Switch-satsen faller igenom

I C-språket är switch-satsen fall through; det betyder att om du inte använder en break-sats i switchfallet kommer alla fall efter matchningsfallet att exekveras.

Låt oss försöka förstå fall through state of switch-satsen genom exemplet nedan.

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

Produktion

 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 

Produktion

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

Kapslad växelfallsbeskrivning

Vi kan använda så många switch-satser som vi vill i en switch-sats. Sådana typer av satser kallas kapslade switchcase-satser. Betrakta följande exempel.

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

Produktion

 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 

Fördelar med switch-satsen:

Det finns flera fördelar med byta uttalande i C. Några huvudfördelar med switch-satsen är följande:

    Läsbarhet och tydlighet:De byta uttalande ger ett kortfattat och enkelt sätt att uttrycka sig på flervägsförgrening i koden. Att hantera flera fall kan göra koden mer organiserad och lättare att läsa än flera kapslade if-else-satser .Effektivitet:De byta uttalande är i allmänhet mer effektiv än en serie av if-else uttalanden när man hanterar flera tillstånd. Det fungerar som en d direkt hoppbord , vilket gör den snabbare och mer optimerad när det gäller exekveringstid.Fallbaserad logik:De byta uttalande passar naturligtvis scenarier där programmet behöver fatta beslut baserat på specifika värden för en enskild variabel. Det är ett intuitivt och enkelt sätt att implementera fallbaserad logik.

De byta uttalande stöder att använda ett standardfall som fungerar som en catch-all-alternativ för värden som inte matchar några angivna fall. Detta standardfall hanterar ovanliga uppgifter eller omständigheter som inte uttryckligen anges.

Nackdelar med switch-satsen:

Det finns flera nackdelar med byta uttalande i C. Några huvudsakliga nackdelar med switch-satsen är följande:

    Begränsade uttryck:Uttrycket som används i byta uttalande måste resultera i en integralvärde (char, int, enum) eller en kompatibel datatyp. Den klarar inte mer komplexa eller icke-konstanta uttryck , begränsar dess flexibilitet i vissa scenarier.Oförmåga att jämföra intervall:Till skillnad från if-else uttalanden , den byta uttalande kan inte hantera värdeintervall direkt. Varje fall i switch-satsen representerar ett specifikt konstant värde, vilket gör det utmanande att hantera en rad värden effektivt.Inget stöd för flyttalsnummer:De byta uttalande bara accepterar integraltyper (heltal) och värderingar från uppräkningar ; den accepterar inte flyttal. Den klarar sig inte icke-integrerade datatyper tycka om heltal med flyttal , vilket kan vara problematiskt under vissa omständigheter.Genomfallsbeteende: Byt uttalanden ha 'falla igenom' beteende som standard vilket innebär att om ett ärende inte inkluderar en 'bryta' uttalande , utförande kommer 'falla igenom' till följande fallblock. Om det inte hanteras på rätt sätt kan detta leda till oönskat beteende.Dubblettkod:Använder en byta uttalande kan resultera i duplicerad kod under vissa omständigheter, särskilt när många fall kräver samma åtgärder. Om det inte hanteras korrekt kan detta leda till kodduplicering.Kapslade switchar kan bli komplexa:När man har att göra med kapslade byta uttalanden , kan koden bli komplex och mindre läsbar. Det kan kräva ytterligare ansträngningar att förstå och underhålla sådana kapslade strukturer.