kytkin…kotelo C:ssä (Switch Statement C:ssä) esimerkein

⚡ Älykäs yhteenveto

C-kielen Switch-lauseke vertaa yhtä lauseketta useisiin tapauskohtaisiin tunnisteisiin ja suorittaa vastaavuuslohkon, mikä tarjoaa puhtaamman vaihtoehdon pitkille if-else-ketjuille, kun ohjelman on valittava useiden kiinteiden kokonaisluku- tai merkkiarvojen joukosta.

  • 🔀 Monisuuntainen haarautuminen: Kytkin testaa yhtä lauseketta ja hyppää vastaavaan tapaus-/tapaus-otsikkoon.
  • 🏷️ Kotelotarrat: Jokaisessa tapauksessa käytetään yksilöllistä vakiota, joka on kokonaisluku tai merkkitunniste ja päättyy kaksoispisteeseen.
  • Avainsanan tauko: Break-lauseke lopettaa tapauksen; ilman sitä suoritus epäonnistuu.
  • 🧩 Oletustapaus: Valinnainen oletuslohko suoritetaan, kun mikään tapaustunniste ei vastaa lauseketta.
  • 📋 Vaihda säännöt: Tapaustunnisteet pysyvät vakioina ja yksilöllisinä, ja vain yksi oletustunniste sallitaan.

Switch-lauseke C:ssä

Mikä on Switch Statement C:ssä?

C-kielen Switch-lauseke testaa muuttujan arvoa ja vertaa sitä useisiin tapauksiin. Kun tapauskohtainen osuma löytyy, suoritetaan kyseiseen tapaukseen liittyvä lausekelohko.

Jokaisella kytkimen lohkon tapauksella on eri nimi/numero, jota kutsutaan tunnisteeksi. Käyttäjän antamaa arvoa verrataan kaikkiin kytkinlohkon sisällä oleviin tapauksiin, kunnes osuma löytyy.

Jos tapauskohtaa EI löydy, oletuskäsky suoritetaan ja ohjaus poistuu kytkinlohkosta.

Vaihda kirjainkokosyntaksia

Yleinen syntaksi siitä, kuinka kytkintapaus toteutetaan C-ohjelmassa, on seuraava:

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;
  • Lauseke voi olla kokonaislukulauseke tai merkkilauseke.
  • Arvo-1, 2, n ovat tapaustunnisteita, joita käytetään tunnistamaan jokainen tapaus erikseen. Muista, että kirjainkokomerkinnät eivät saa olla samoja, koska se voi aiheuttaa ongelmia ohjelmaa suoritettaessa. Oletetaan, että meillä on kaksi tapausta, joissa on sama nimiö kuin "1". Sitten ohjelmaa suoritettaessa ensimmäisenä esiintyvä tapaus suoritetaan, vaikka haluat ohjelman suorittavan toisen tapauksen. Tämä aiheuttaa ongelmia ohjelmassa eikä tuota haluttua tulosta.
  • Tapaustarrat päättyvät aina kaksoispisteeseen ( : ). Jokainen näistä tapauksista liittyy lohkoon.
  • Lohko on vain useita lausekkeita, jotka on ryhmitelty tiettyä tapausta varten.
  • Aina kun kytkin suoritetaan, testilausekkeen arvoa verrataan kaikkiin tapauksiin, jotka olemme määrittäneet kytkimen sisällä. Oletetaan, että testilauseke sisältää arvon 4. Tätä arvoa verrataan kaikkiin tapauksiin, kunnes ohjelmasta löytyy nimike neljä. Heti kun tapaus löytyy, kyseiseen tapaukseen liittyvä lausekelohko suoritetaan ja ohjaus poistuu kytkimestä.
  • Taukoavainsana kussakin tapauksessa osoittaa tietyn tapauksen päättymisen. Jos emme laita taukoa jokaiseen tapaukseen, niin vaikka tietty tapaus suoritetaan, C:n kytkin jatkaa kaikkien tapausten suorittamista, kunnes loppu saavutetaan. Näin ei pitäisi tapahtua; siksi meidän on aina laitettava break-avainsana jokaisessa tapauksessa. Break lopettaa tapauksen, kun se on suoritettu, ja ohjaus putoaa kytkimestä.
  • Oletustapaus on valinnainen. Aina kun testilausekkeen arvo ei täsmää minkään kytkimen sisällä olevan tapauksen kanssa, oletusarvo suoritetaan. Muuten kytkimeen ei tarvitse kirjoittaa oletusarvoa.
  • Kun kytkin on suoritettu, ohjaus siirtyy käskyyn-x ja ohjelman suoritus jatkuu.

Vaihtolauseen vuokaavio

Seuraava kaavio havainnollistaa, kuinka kotelo valitaan kytkinkotelossa:

Vaihtolauseen vuokaavio

Kuinka Switch toimii

Esimerkki kytkinkotelosta C:ssä

Seuraava ohjelma havainnollistaa kytkimen käyttöä:

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

lähtö:

Value is 8

Esimerkki kytkinkotelosta C:ssä

  1. Annetussa ohjelmassa olemme alustaneet muuttuja numero arvolla 8.
  2. Kytkinrakennetta käytetään vertaamaan muuttujaan num tallennettua arvoa ja suorittamaan sovitettuun tapaukseen liittyvä lausekelohko.
  3. Koska tässä ohjelmassa muuttujaan num tallennettu arvo on kahdeksan, kytkin suorittaa tapauksen, jonka case-nimi on 8. Tapauksen suorittamisen jälkeen ohjaus putoaa kytkimestä ja ohjelma lopetetaan onnistuneella tuloksella arvon tulostaminen tulostusnäytölle.

Yritä muuttaa muuttujan num arvoa ja huomaa muutos lähdössä.

Tarkastellaan esimerkiksi seuraavaa oletusarvoista ohjelmaa:

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

lähtö:

Other programming language

Kun työskentelet kytkinkotelon kanssa C:ssä, ryhmittelet useita tapauksia yksilöllisillä nimiöillä. Sinun on esitettävä break-lause kussakin tapauksessa haarautuaksesi switch-käskyn lopussa.

Valinnainen oletustapaus suoritetaan, kun muita osumia ei tehdä.

Otamme huomioon seuraavan vaihtolausekkeen:

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

lähtö:

Four, Five, or Six.

Sisäkkäinen kytkin C:ssä

In C, meillä voi olla sisäinen kytkin upotettuna ulompaan kytkimeen. Myös sisäisen ja ulkoisen kytkimen tapausvakioilla voi olla yhteisiä arvoja ja ilman ristiriitoja.

Tarkastellaan seuraavaa ohjelmaa, joka pyytää käyttäjää kirjoittamaan oman tunnuksensa. Jos tunnus on kelvollinen, ohjelma pyytää häntä antamaan salasanansa; jos salasana on oikein, ohjelma tulostaa käyttäjän nimen, muuten ohjelma tulostaa Väärä salasana; ja jos tunnusta ei ole olemassa, ohjelma tulostaa Väärä tunnus.

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

lähtö:

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

Sisäkkäinen kytkin C:ssä

  1. Annetussa ohjelmassa olemme alustaneet kaksi muuttujaa: tunnuksen ja salasanan.
  2. Ulkoista kytkinrakennetta käytetään muuttujaan ID syötetyn arvon vertailuun. Se suorittaa vastaavaan tapaukseen (kun ID==500) liittyvän lausekelohkon.
  3. Jos lohkolauseke suoritetaan vastaavalla kirjainkoolla, sisäistä kytkintä käytetään vertaamaan password-muuttujaan syötettyjä arvoja ja suorittamaan vastaavaan kirjainkokoon (kun password==000) linkitetyt lausekkeet.
  4. Muussa tapauksessa kytkentätapa laukaisee oletustapauksen ja tulostaa ohjelman ääriviivaa koskevan tekstin.

Miksi tarvitsemme Switch-kotelon?

Siinä on yksi mahdollinen ongelma jos-muuten lausunto eli ohjelman monimutkaisuus kasvaa aina kun vaihtoehtoisten polkujen määrä kasvaa. Jos käytät ohjelmassa useita if-else -rakenteita, ohjelman lukeminen ja ymmärtäminen voi olla vaikeaa. Joskus se voi jopa hämmentää kehittäjää, joka itse kirjoitti ohjelman.

Ratkaisu tähän ongelmaan on kytkinlause.

Vaihtolausekkeen säännöt

Noudata näitä sääntöjä kirjoittaessasi kytkintä C:llä:

  • Lauseke on aina suoritettava tulokseen.
  • Tapaustunnisteiden on oltava vakioita ja yksilöllisiä.
  • Koteloiden tarrojen tulee päättyä kaksoispisteeseen ( : ).
  • Taukoavainsana on oltava jokaisessa tapauksessa.
  • Oletustunnisteita voi olla vain yksi.
  • Voimme upottaa useita kytkinlauseita.

UKK

AC-kytkin hyväksyy vain kokonaisluku-, char- ja enum-arvot – ei koskaan liukulukuja tai merkkijonoja, koska jokaisen tunnisteen on oltava vakiokokonaisluku.

Ilman taukoa hallinta katkeaa ja käynnistyy myös jokaisessa myöhemmässä tapauksessa – joskus tahallisena, mutta yleensä vahingossa tapahtuvan virheen seurauksena.

Ei. C ei voi vaihtaa merkkijonoja; otsikoiden on oltava vakioita kokonaislukuja. Vertaa sen sijaan tekstiä strcmp-funktion kanssa if-else-metodin sisällä.

Standardi C kieltää alueet, vaikka GCC sallii ei-siirrettävän tapauslaajennuksen 1 … 5:, jota siirrettävän koodin tulisi välttää.

Ei. Oletusarvoinen tapaus voi sijaita missä tahansa; se suoritetaan vain, kun mitään vastaavaa otsikkoa ei ole. Viimeinen sijoitus on pelkkä sopimusperusteinen.

Kyllä, mutta kiedo kotelon runko aaltosulkeisiin; muuten label-määrittely voi laukaista kääntäjävirheitä.

Kyllä. Tekoälykoodausavustajat luonnostelevat kytkinlohkoja, lisäävät jokaisen katkaisun ja merkitsevät vahingossa tapahtuvan läpimenon. Tarkista aina luotu logiikka.

GitHub Copilot täydentää automaattisesti tapausotsikot, lisää break-lausekkeet ja muuntaa pitkät if-else-ketjut kommentista kytkimeksi.

Tiivistä tämä viesti seuraavasti: