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.

  • ๐Ÿ”€ Flervรคgsfรถrgrening: En switch testar ett uttryck och hoppar till matchande skiftlรคgesetikett.
  • ๐Ÿท๏ธ Fodraletiketter: Varje fall anvรคnder ett unikt konstant heltal eller teckenetikett som slutar med ett kolon.
  • โ›” Nyckelordet Paus: break-satsen avslutar ett รคrende; utan den misslyckas exekveringen.
  • ๐Ÿงฉ Standardfall: Det valfria standardblocket kรถrs nรคr ingen skiftlรคgesetikett matchar uttrycket.
  • ๐Ÿ“‹ Vรคxlingsregler: ร„rendeetiketter fรถrblir konstanta och unika, med endast en standardetikett tillรฅten.

Switch-sats i C

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:

Byt uttalande flรถdesschema

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

Switch Case Exempel i C

  1. I det givna programmet har vi initialiserat en variabel num med vรคrde 8.
  2. 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.
  3. 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

Kapslad switch i C

  1. I det givna programmet har vi initialiserat tvรฅ variabler: ID och lรถsenord.
  2. 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).
  3. 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).
  4. 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.

Vanliga frรฅgor

AC-switchen accepterar endast int-, char- och enum-vรคrden โ€” aldrig flyttal eller strรคngar, eftersom varje etikett mรฅste vara ett konstant heltal.

Utan avbrott faller kontrollen igenom och kรถrs รคven i alla senare fall โ€“ ibland avsiktligt, men vanligtvis en oavsiktlig bugg.

Nej. C kan inte aktivera strรคngar; etiketter mรฅste vara konstanta heltal. Jรคmfรถr text med strcmp inuti if-else istรคllet.

Standard C fรถrbjuder intervall, รคven om GCC tillรฅter ett icke-portabelt fall 1 โ€ฆ 5: -tillรคgg som portabel kod bรถr undvika.

Nej. Standardlรคget kan placeras var som helst; det kรถrs bara nรคr ingen etikett matchar. Den sista placeringen รคr bara en konvention.

Ja, men linda in hรถljets kropp i klammerparenteser; annars kan en deklaration efter en etikett utlรถsa kompilatorfel.

Ja. AI-kodningsassistenter utarbetar switchblock, lรคgger till varje brytning och flaggar oavsiktligt genombrott. Granska alltid den genererade logiken.

GitHub Copilot autokompletterar รคrendeetiketter, infogar break-satser och konverterar lรฅnga if/else-kedjor till en switch frรฅn en kommentar.

Sammanfatta detta inlรคgg med: