switch...fall i C (Switch Statement i C) med exempel
โก Smart sammanfattning
Switch-satsen i C jรคmfรถr ett uttryck mot flera case-etiketter och kรถr matchande block, vilket erbjuder ett renare alternativ till lรฅnga if-else-kedjor nรคr ett program mรฅste vรคlja bland mรฅnga fasta heltal eller teckenvรคrden.

Vad รคr Switch Statement i C?
Switch-satsen i C testar vรคrdet pรฅ en variabel och jรคmfรถr den med flera fall. Nรคr fallmatchningen hittas kรถrs ett block med satser associerade med just det fallet.
Varje fall i ett block av en switch har ett annat namn/nummer som kallas en identifierare. Vรคrdet som anvรคndaren tillhandahรฅller jรคmfรถrs med alla fall inuti switchblocket tills matchningen hittas.
Om en fallmatchning INTE hittas, exekveras standardsatsen och kontrollen gรฅr ut ur switchblocket.
Byt vรคxelsyntax
En allmรคn syntax fรถr hur switch-case implementeras i ett "C"-program รคr fรถljande:
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;
- Uttrycket kan vara heltalsuttryck eller ett teckenuttryck.
- Vรคrde-1, 2, n รคr falletiketter som anvรคnds fรถr att identifiera varje fall individuellt. Kom ihรฅg att falletiketter inte bรถr vara samma eftersom det kan skapa problem nรคr ett program kรถrs. Anta att vi har tvรฅ fall med samma etikett som '1'. Sedan nรคr programmet kรถrs kommer fallet som visas fรถrst att kรถras รคven om du vill att programmet ska kรถra ett andra fall. Detta skapar problem i programmet och ger inte รถnskat resultat.
- Etiketter fรถr fodral slutar alltid med ett kolon ( : ). Vart och ett av dessa fall รคr associerat med ett block.
- Ett block รคr inget annat รคn flera pรฅstรฅenden som รคr grupperade fรถr ett visst fall.
- Nรคrhelst vรคxeln exekveras jรคmfรถrs vรคrdet av testuttryck med alla fall som vi har definierat inuti vรคxeln. Antag att testuttrycket innehรฅller vรคrde 4. Detta vรคrde jรคmfรถrs med alla fall tills fallet vars etikett fyra finns i programmet. Sรฅ snart ett fall hittas exekveras blocket av uttalanden som รคr associerade med det specifika fallet och kontrollen gรฅr ut ur switchen.
- Nyckelordet break i varje fall indikerar slutet pรฅ ett visst fall. Om vi โโinte sรคtter brytningen i varje fall kommer vรคxeln i C att fortsรคtta att utfรถra alla fall tills slutet nรฅs, trots att det specifika fallet exekveras. Detta bรถr inte hรคnda; dรคrfรถr mรฅste vi alltid sรคtta break nyckelord i varje fall. Break kommer att avsluta fallet nรคr det har utfรถrts och kontrollen kommer att falla ur omkopplaren.
- Standardfallet รคr valfritt. Nรคrhelst vรคrdet pรฅ testuttryck inte matchas med nรฅgot av fallen inuti switchen, kommer standarden att exekveras. Annars รคr det inte nรถdvรคndigt att skriva standard i switchen.
- Nรคr vรคxlingen รคr utfรถrd kommer kontrollen att gรฅ till sats-x, och exekveringen av ett program kommer att fortsรคtta.
Byt uttalande flรถdesschema
Fรถljande diagram illustrerar hur ett fall vรคljs i switch case:
Hur Switch fungerar
Switch Case Exempel i C
Fรถljande program illustrerar anvรคndningen av 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; }
Produktion:
Value is 8
- I det givna programmet har vi initialiserat en variabel num med vรคrde 8.
- En switch-konstruktion anvรคnds fรถr att jรคmfรถra vรคrdet lagrat i variabeln num och exekvera blocket av satser som รคr associerade med det matchade fallet.
- I det hรคr programmet, eftersom vรคrdet lagrat i variabeln num รคr รฅtta, kommer en switch att exekvera fallet vars case-etikett รคr 8. Efter exekvering av fallet kommer kontrollen att falla ut ur switchen och programmet avslutas med framgรฅngsrikt resultat av skriva ut vรคrdet pรฅ utmatningsskรคrmen.
Fรถrsรถk att รคndra vรคrdet pรฅ variabel num och mรคrk fรถrรคndringen i utdata.
Till exempel betraktar vi fรถljande program som รคr standard:
#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");}}
Produktion:
Other programming language
Nรคr du arbetar med switch case i C grupperar du flera fall med unika etiketter. Du mรฅste infรถra en break-sats i varje fall fรถr att fรถrgrena sig i slutet av en switch-sats.
Det valfria standardfallet kรถrs nรคr inga andra matchningar gรถrs.
Vi รถvervรคger fรถljande switch-sats:
#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");}}
Produktion:
Four, Five, or Six.
Kapslad switch i C
In C, kan vi ha en inre switch inbรคddad i en yttre switch. Dessutom kan fallkonstanterna fรถr den inre och yttre omkopplaren ha gemensamma vรคrden och utan nรฅgra konflikter.
Vi betraktar fรถljande program, som ber anvรคndaren att skriva in sitt eget ID. Om ID:t รคr giltigt kommer det att be honom ange sitt lรถsenord; om lรถsenordet รคr korrekt kommer programmet att skriva ut anvรคndarens namn, annars kommer programmet att skriva ut Felaktigt lรถsenord; och om ID:t inte finns kommer programmet att skriva ut Felaktigt ID.
#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; } }
Produktion:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- I det givna programmet har vi initialiserat tvรฅ variabler: ID och lรถsenord.
- En yttre switch-konstruktion anvรคnds fรถr att jรคmfรถra vรคrdet som anges i variabeln ID. Den exekverar blocket med satser som รคr associerade med det matchande fallet (nรคr ID==500).
- Om blocksatsen exekveras med matchande gemener och skiftlรคge, anvรคnds en inre switch fรถr att jรคmfรถra vรคrdena som anges i variabeln password och exekvera satserna lรคnkade med matchande gemener och skiftlรคge (nรคr password==000).
- Annars kommer vรคxlingsfallet att utlรถsa standardfallet och skriva ut lรคmplig text angรฅende programkonturen.
Varfรถr behรถver vi ett Switch-fodral?
Det finns ett potentiellt problem med if-else uttalande vilket รคr att programmets komplexitet รถkar nรคrhelst antalet alternativa vรคgar รถkar. Om du anvรคnder flera if-else-konstruktioner i programmet kan ett program bli svรฅrt att lรคsa och fรถrstรฅ. Ibland kan det till och med fรถrvirra utvecklaren som sjรคlv skrev programmet.
Lรถsningen pรฅ detta problem รคr switch-satsen.
Regler fรถr switch statement
Fรถlj dessa regler nรคr du skriver en switch i C:
- Ett uttryck mรฅste alltid kรถras till ett resultat.
- Fodraletiketter mรฅste vara konstanta och unika.
- Fodraletiketter mรฅste sluta med ett kolon ( : ).
- Ett brytnyckelord mรฅste finnas i varje fall.
- Det kan bara finnas en standardetikett.
- Vi kan kapsla flera switch-satser.



