logo

C Switch-erklæring

Switch-sætningen i C er en alternativ til if-else-if ladder-sætning, som giver os mulighed for at udføre flere operationer for de forskellige mulige værdier af en enkelt variabel kaldet switch-variabel. Her kan vi definere forskellige udsagn i flere tilfælde for de forskellige værdier af en enkelt variabel.

Syntaksen for switch-sætning i c sprog er givet nedenfor:

 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 for switch-sætning i C-sprog

  1. Det skifte udtryk skal være af en heltal- eller tegntype.
  2. Det sagsværdi skal være et heltal eller en tegnkonstant.
  3. Det sagsværdi kan kun bruges inde i switch-sætningen.
  4. Det pauseerklæring i switch tilfælde er ikke must. Det er valgfrit. Hvis der ikke findes en pauseerklæring i sagen, vil alle sagerne blive eksekveret tilstede efter den matchede sag. Det er kendt som falder gennem tilstanden af ​​C switch-sætning.

Lad os prøve at forstå det ved eksemplerne. Vi antager, at der er følgende variabler.

 int x,y,z; char a,b; float f; 
Gyldig switchUgyldig kontaktGyldig sagUgyldig sag
switch (x)skifte(f)tilfælde 3;tilfælde 2.5;
switch(x>y)switch(x+2,5)tilfælde 'a';tilfælde x;
switch(a+b-2)tilfælde 1+2;tilfælde x+2;
switch(func(x,y))case 'x'>'y';tilfælde 1,2,3;

Flowchart af switch statement i C

flow of switch-erklæring i c

Funktion af switch case statement

Først evalueres heltalsudtrykket angivet i switch-sætningen. Denne værdi matches derefter en efter en med de konstante værdier, der er angivet i de forskellige tilfælde. Hvis der findes et match, udføres alle de sætninger, der er specificeret i det tilfælde, sammen med alle de tilfælde, der er til stede efter den sag, inklusive standardsætningen. Ikke to sager kan have ens værdier. Hvis den matchede sag indeholder en break-sætning, vil alle de tilfælde, der er til stede efter det, blive sprunget over, og kontrollen kommer ud af kontakten. Ellers vil alle sager efter den matchede sag blive eksekveret.

Hvordan virker C switch-sætning?

Lad os gennemgå trin-for-trin-processen for, hvordan switch-sætningen fungerer i C:

Overvej følgende skifte erklæring :

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 

Trin-for-trin proces:

  1. Det skifte variabel antal er vurderet. I dette tilfælde, på en initialiseres med værdi 2 .
  2. Det vurderet num (2) værdi sammenlignes med de konstanter, der er angivet i hvert tilfælde etiketten inde i skifte blok .
  3. Det skifte erklæring matcher vurderet værdi (2) med konstanten angivet i andet tilfælde (tilfælde 2) . Da der er et match, springer programmet til den kodeblok, der er knyttet til matchende sag (tilfælde 2) .
  4. Kodeblokken tilknyttet tilfælde 2 udføres, som udskriver 'Værdien er 2' til konsollen.
  5. Det 'pause' nøgleord er til stede i kodeblokken for tilfælde 2 . Som følge heraf bryder programmet ud af switch-sætningen umiddelbart efter udførelse af kodeblokken.
  6. Programstyringen fortsætter efter skifte erklæring , og eventuelle erklæringer efter skifte erklæring bliver henrettet. I dette tilfælde er der ingen udsagn efter skiftet, så programmet afsluttes.
  7. Det skifte erklæring vurderet værdien af variabelt antal , fandt et match med tilfælde 2, udførte den tilsvarende kodeblok og afsluttede derefter skifte blok på grund af tilstedeværelsen af 'pause' erklæring .

Eksempel på en switch-sætning i C

Lad os se et simpelt eksempel på en C language switch-sætning.

 #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

vlc download videoer fra youtube
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

Switch case eksempel 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 og standard søgeord i Switch-sætning

Lad os forklare og definere 'pause' og 'standard' søgeord i sammenhæng med switch-sætningen sammen med eksempelkode og output.

1. Pause søgeord:

Det 'break' søgeord bruges inden for kodeblokken i hvert tilfælde til at afslutte switch-sætningen før tid. Når programmet støder på en 'pause' erklæring inde i en kasseblok forlader den straks skifte erklæring , der forhindrer udførelse af efterfølgende sagsblokeringer. Det 'pause' erklæring er afgørende for at undgå switch-udsagn' 'falder gennem' opførsel.

Eksempel:

Lad os tage et program for at forstå brugen af bryde søgeord 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 

Forklaring:

I dette eksempel er skifte erklæring vurderer værdien af variabelt antal (som er 3 ) og matcher den med tilfælde 3 . Kodeblokken tilknyttet tilfælde 3 er udført, udskrivning 'Værdien er 3' til konsollen. Det 'pause' erklæring inden for tilfælde 3 sikrer, at programmet afslutter switch-sætningen umiddelbart efter udførelse af denne sagsblok, hvilket forhindrer udførelse af andre tilfælde.

2. Standardsøgeord:

Når ingen af ​​de sagskonstanter matche vurderet udtryk , fungerer det som en catch-all sag . Hvis der ikke findes et matchende tilfælde, og en 'standard' tilfælde eksisterer , kodeblokken forbundet med 'Standard' sagen køres. Det bruges ofte til at håndtere omstændigheder, hvor ingen af ​​de angivne situationer gælder for det leverede input.

Eksempel:

Lad os tage et program for at forstå brugen af standard søgeord 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 

Forklaring:

I dette eksempel er skifte erklæring undersøger værdien af variabelt antal (som er 5 ). Fordi ingen tilfælde matcher num, udfører programmet den kodeblok, der er knyttet til 'standard' tilfælde . Det 'pause' erklæring inde i 'standard' tilfælde sikrer, at programmet afslutter skifte erklæring efter at have udført 'Standard' sagsblok.

Både 'pause' og 'standard' søgeord spille væsentlige roller i at kontrollere strømmen af ​​eksekvering i en switch-sætning. Det 'pause' erklæring hjælper med at forhindre gennemfaldsadfærden, mens den 'standard' tilfælde giver en måde at håndtere uovertrufne sager på.

C Switch-erklæringen er faldende

I C-sprog er switch-sætningen fall through; det betyder, at hvis du ikke bruger en break-sætning i switch-tilfældet, vil alle sager efter matchende sag blive udført.

Lad os prøve at forstå fald-gennem-tilstanden af ​​switch-erklæringen ved hjælp af eksemplet nedenfor.

 #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 

Indlejret switch case statement

Vi kan bruge så mange switch-sætninger, som vi vil, i en switch-sætning. Sådanne typer udsagn kaldes indlejrede switch-tilfældeudsagn. Overvej følgende eksempel.

 #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 

Fordele ved switch-erklæringen:

Der er flere fordele ved skifte erklæring i C. Nogle hovedfordele ved switch-sætningen er som følger:

    Læsbarhed og klarhed:Det skifte erklæring giver en kortfattet og ligetil måde at udtrykke sig på flervejs forgrening i koden. Håndtering af flere sager kan gøre koden mere organiseret og lettere at læse end flere indlejrede if-else-udsagn .Effektivitet:Det skifte erklæring er generelt mere effektiv end en serie af if-else udsagn når man har at gøre med flere forhold. Det fungerer som en d direkte springbord , hvilket gør det hurtigere og mere optimeret med hensyn til eksekveringstid.Sagsbaseret logik:Det skifte erklæring passer naturligvis til scenarier, hvor programmet skal træffe beslutninger baseret på specifikke værdier af en enkelt variabel. Det er en intuitiv og ligetil måde at implementere case-baseret logik på.

Det skifte erklæring understøtter brug af en standardcase, der fungerer som en catch-all mulighed for værdier, der ikke matcher nogen angivne tilfælde. Det her standard tilfælde håndterer usædvanlige input eller omstændigheder, der ikke udtrykkeligt er angivet.

Ulemper ved switch-sætningen:

Der er flere ulemper ved skifte erklæring i C. Nogle væsentlige ulemper ved switch-sætningen er som følger:

    Begrænsede udtryk:Udtrykket brugt i skifte erklæring skal resultere i en integralværdi (char, int, enum) eller en kompatibel datatype. Den kan ikke klare mere komplekse eller ikke-konstante udtryk , begrænser dens fleksibilitet i nogle scenarier.Manglende evne til at sammenligne intervaller:I modsætning til if-else udsagn , det skifte erklæring kan ikke håndtere værdiområder direkte. Hvert tilfælde i switch-sætningen repræsenterer en specifik konstant værdi, hvilket gør det udfordrende at håndtere en række værdier effektivt.Ingen understøttelse af flydende kommatal:Det skifte erklæring kun accepterer integraltyper (heltal) og værdier fra optællinger ; den accepterer ikke flydende kommatal. Den klarer ikke ikke-integrale datatyper synes godt om heltal med flydende komma , hvilket kan være problematisk i nogle tilfælde.Gennemfaldsadfærd: Skift udsagn har 'falder gennem' adfærd som standard, hvilket indebærer, at hvis en sag ikke omfatter en 'pause' erklæring , udførelse vil 'falder gennem' til følgende sagsblok. Hvis det ikke administreres korrekt, kan dette resultere i uønsket adfærd.Dublet kode:Ved hjælp af en skifte erklæring kan resultere i duplikatkode under nogle omstændigheder, især når adskillige sager kræver de samme handlinger. Hvis det ikke administreres korrekt, kan dette resultere i kodeduplikering.Indlejrede kontakter kan blive komplekse:Når man beskæftiger sig med indlejret skifte udsagn , kan koden blive kompleks og mindre læsbar. Det kan kræve yderligere indsats at forstå og vedligeholde sådanne indlejrede strukturer.