switch...case i C (Switch Statement in C) med eksempler

โšก Smart oppsummering

Switch-setningen i C sammenligner ett uttrykk mot flere case-etiketter og kjรธrer den matchende blokken, noe som tilbyr et renere alternativ til lange if-else-kjeder nรฅr et program mรฅ velge mellom mange faste heltalls- eller tegnverdier.

  • ๐Ÿ”€ Flerveis forgrening: En bryter tester ett uttrykk og hopper til den samsvarende etiketten for store og smรฅ bokstaver.
  • ๐Ÿท๏ธ Saksetiketter: Hvert tilfelle bruker et unikt konstant heltall eller tegnetikett som slutter pรฅ et kolon.
  • โ›” Paus-nรธkkelord: `break`-setningen avslutter en sak; uten den faller utfรธrelsen gjennom.
  • ๐Ÿงฉ Standardtilfelle: Den valgfrie standardblokken kjรธres nรฅr ingen saksnavn samsvarer med uttrykket.
  • ???? Bytt regler: Saksetiketter forblir konstante og unike, med bare รฉn standardetikett tillatt.

Switch-setning i C

Hva er Switch Statement i C?

Switch-setningen i C tester verdien av en variabel og sammenligner den med flere tilfeller. Nรฅr samsvaret mellom tilfellene er funnet, utfรธres en blokk med setninger knyttet til det bestemte tilfellet.

Hvert tilfelle i en blokk av en bryter har et annet navn/nummer som omtales som en identifikator. Verdien oppgitt av brukeren sammenlignes med alle tilfellene inne i bryterblokken til matchen er funnet.

Hvis en saksmatch IKKE blir funnet, blir standardsetningen utfรธrt, og kontrollen gรฅr ut av bryterblokken.

Bytt sakssyntaks

En generell syntaks for hvordan switch-case implementeres i et 'C'-program er som fรธlger:

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;
  • Uttrykket kan vรฆre heltallsuttrykk eller et tegnuttrykk.
  • Verdi-1, 2, n er kasusetiketter som brukes til รฅ identifisere hvert tilfelle individuelt. Husk at saksetiketter ikke skal vรฆre de samme, da det kan skape et problem mens du kjรธrer et program. Anta at vi har to tilfeller med samme etikett som '1'. Mens du kjรธrer programmet, vil saken som vises fรธrst bli utfรธrt selv om du vil at programmet skal kjรธre en ny sak. Dette skaper problemer i programmet og gir ikke รธnsket utgang.
  • Etiketter pรฅ etui ender alltid med et kolon ( : ). Hvert av disse tilfellene er knyttet til en blokk.
  • En blokk er ikke annet enn flere utsagn som er gruppert for en bestemt sak.
  • Hver gang bryteren utfรธres, sammenlignes verdien av testuttrykk med alle tilfellene som vi har definert inne i bryteren. Anta at testuttrykket inneholder verdi 4. Denne verdien sammenlignes med alle tilfellene inntil kasus hvis etikett fire finnes i programmet. Sรฅ snart en sak er funnet, blir blokken med utsagn knyttet til den aktuelle saken utfรธrt og kontrollen gรฅr ut av bryteren.
  • Nรธkkelordet pause i hvert tilfelle indikerer slutten pรฅ en bestemt sak. Hvis vi ikke setter pausen i hver sak, vil bryteren i C fortsette รฅ utfรธre alle sakene til slutten er nรฅdd, selv om den spesifikke saken er utfรธrt. Dette bรธr ikke skje; derfor mรฅ vi alltid sette brudd nรธkkelord i hvert tilfelle. Break vil avslutte saken nรฅr den er utfรธrt og kontrollen vil falle ut av bryteren.
  • Standard tilfellet er valgfritt. Nรฅr verdien av testuttrykk ikke samsvarer med noen av tilfellene inne i bryteren, vil standarden bli utfรธrt. Ellers er det ikke nรธdvendig รฅ skrive standard i bryteren.
  • Nรฅr svitsjen er utfรธrt, vil kontrollen gรฅ til setningen-x, og kjรธringen av et program vil fortsette.

Bytt erklรฆring flytskjema

Fรธlgende diagram illustrerer hvordan et tilfelle velges i bryterhus:

Bytt erklรฆring flytskjema

Hvordan bryteren fungerer

Eksempel pรฅ brytertilfelle i C

Fรธlgende program illustrerer bruken av bryteren:

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

Utgang:

Value is 8

Eksempel pรฅ brytertilfelle i C

  1. I det gitte programmet har vi initialisert en variabel num med verdi 8.
  2. En bryterkonstruksjon brukes til รฅ sammenligne verdien som er lagret i variabel num og utfรธre blokken med setninger som er knyttet til det matchede tilfellet.
  3. I dette programmet, siden verdien som er lagret i variabel num er รฅtte, vil en bryter utfรธre saken hvis saksetikett er 8. Etter รฅ ha utfรธrt saken, vil kontrollen falle ut av bryteren og programmet vil bli avsluttet med vellykket resultat av skrive ut verdien pรฅ utdataskjermen.

Prรธv รฅ endre verdien av variabel num og legg merke til endringen i utdata.

For eksempel vurderer vi fรธlgende program som er 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");}}

Utgang:

Other programming language

Nรฅr du arbeider med bryterhus i C, grupperer du flere saker med unike etiketter. Du mรฅ introdusere en break-setning i hvert tilfelle for รฅ forgrene seg pรฅ slutten av en switch-setning.

Den valgfrie standardsaken kjรธrer nรฅr ingen andre treff.

Vi vurderer fรธlgende brytersetning:

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

Utgang:

Four, Five, or Six.

Nestet bryter i C

In C, kan vi ha en indre bryter innebygd i en ytre bryter. Dessuten kan kasuskonstantene til den indre og ytre bryteren ha felles verdier og uten noen konflikter.

Vi ser pรฅ fรธlgende program, som ber brukeren skrive inn sin egen ID. Hvis ID-en er gyldig, vil den be vedkommende om รฅ skrive inn passordet sitt. Hvis passordet er riktig, vil programmet skrive ut brukernavnet, ellers vil programmet skrive ut Feil passord. Hvis ID-en ikke finnes, vil programmet skrive ut Feil 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;
        }
}

Utgang:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

Nestet bryter i C

  1. I det gitte programmet har vi initialisert to variabler: ID og passord.
  2. En ytre bryterkonstruksjon brukes til รฅ sammenligne verdien som er angitt i variabel ID. Den utfรธrer blokken med setninger som er knyttet til det samsvarende tilfellet (nรฅr ID==500).
  3. Hvis blokksetningen utfรธres med samsvarende store og smรฅ bokstaver, brukes en indre bryter til รฅ sammenligne verdiene som er angitt i variabelen password og utfรธre setningene som er koblet til samsvarende store og smรฅ bokstaver (nรฅr password==000).
  4. Ellers vil brytersaken utlรธse standardsaken og skrive ut den aktuelle teksten angรฅende programoversikten.

Hvorfor trenger vi et Switch-deksel?

Det er ett potensielt problem med if-else-uttalelse som er kompleksiteten til programmet รธker hver gang antallet alternative veier รธker. Hvis du bruker flere if-else-konstruksjoner i programmet, kan et program bli vanskelig รฅ lese og forstรฅ. Noen ganger kan det til og med forvirre utvikleren som selv skrev programmet.

Lรธsningen pรฅ dette problemet er switch-setningen.

Regler for bytteerklรฆring

Fรธlg disse reglene nรฅr du skriver en switch i C:

  • Et uttrykk mรฅ alltid utfรธres for et resultat.
  • Etikettene mรฅ vรฆre konstante og unike.
  • Etiketter mรฅ slutte med et kolon ( : ).
  • Et pausenรธkkelord mรฅ vรฆre til stede i hvert tilfelle.
  • Det kan bare vรฆre รฉn standardetikett.
  • Vi kan neste flere brytersetninger.

Spรธrsmรฅl og svar

AC-bryteren godtar bare int-, char- og enum-verdier โ€“ aldri flytende eller strenger, ettersom hver etikett mรฅ vรฆre et konstant heltall.

Uten brudd faller kontrollen gjennom og kjรธrer ogsรฅ alle senere tilfeller โ€“ noen ganger med vilje, men vanligvis en utilsiktet feil.

Nei. C kan ikke slรฅ pรฅ strenger; etiketter mรฅ vรฆre konstante heltall. Sammenlign tekst med strcmp i if-else i stedet.

Standard C forbyr omrรฅder, selv om GCC tillater en ikke-portabel case 1 โ€ฆ 5: utvidelse som portabel kode bรธr unngรฅ.

Nei. Standardtilfellet kan stรฅ hvor som helst; det kjรธrer bare nรฅr ingen etikett samsvarer. Siste plassering er bare en konvensjon.

Ja, men pakk inn bukseseler rundt kabinettet; ellers kan en deklarasjon etter en etikett utlรธse kompilatorfeil.

Ja. AI-kodingsassistenter utarbeider bryterblokker, legger til hvert brudd og flagger utilsiktet gjennombrudd. Gjennomgรฅ alltid den genererte logikken.

GitHub Copilot autofullfรธrer saksetiketter, setter inn pausesetninger og konverterer lange if-else-kjeder til en bryter fra en kommentar.

Oppsummer dette innlegget med: