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.

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:
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
- Annetussa ohjelmassa olemme alustaneet muuttuja numero arvolla 8.
- Kytkinrakennetta käytetään vertaamaan muuttujaan num tallennettua arvoa ja suorittamaan sovitettuun tapaukseen liittyvä lausekelohko.
- 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
- Annetussa ohjelmassa olemme alustaneet kaksi muuttujaa: tunnuksen ja salasanan.
- Ulkoista kytkinrakennetta käytetään muuttujaan ID syötetyn arvon vertailuun. Se suorittaa vastaavaan tapaukseen (kun ID==500) liittyvän lausekelohkon.
- 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.
- 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.



