logo

C Vaihtolauseke

C:n kytkinkäsky on vaihtoehto if-else-if -ladder-käskylle, jonka avulla voimme suorittaa useita operaatioita yksittäisen muuttujan, jota kutsutaan kytkinmuuttujaksi, eri mahdollisille arvoille. Tässä voimme määritellä useita lauseita useissa tapauksissa yhden muuttujan eri arvoille.

Switch-lauseen syntaksi c kieli on annettu alla:

 switch(expression){ case value1: //code to be executed; break; //optional case value2: //code to be executed; break; //optional ...... default: code to be executed if all cases are not matched; } 

Säännöt vaihtokäskylle C-kielellä

  1. The vaihtaa ilmaisua on oltava kokonaisluku- tai merkkityyppiä.
  2. The tapauksen arvo on oltava kokonaisluku tai merkkivakio.
  3. The tapauksen arvo voidaan käyttää vain kytkinlauseen sisällä.
  4. The katkeaa lausunto kytkimen tapauksessa ei ole välttämätöntä. Se on valinnainen. Jos tapauksesta ei löydy break-lausetta, kaikki tapaukset suoritetaan sovitun tapauksen jälkeen. Se tunnetaan nimellä pudota läpi C switch -lauseen tila.

Yritetään ymmärtää se esimerkkien avulla. Oletamme, että on olemassa seuraavat muuttujat.

 int x,y,z; char a,b; float f; 
Kelvollinen kytkinVirheellinen kytkinKelvollinen tapausVirheellinen tapaus
kytkin (x)kytkin (f)tapaus 3;tapaus 2.5;
kytkin (x>y)kytkin (x+2,5)tapaus 'a';tapaus x;
kytkin (a+b-2)tapaus 1+2;tapaus x+2;
kytkin(toiminto(x,y))tapaus 'x'>'y';tapaus 1,2,3;

C:n kytkimen lauseen vuokaavio

kytkinlauseen virtaus kohdassa c

Kytkimen tapauksen toiminta

Ensin kytkinkäskyssä määritetty kokonaislukulauseke arvioidaan. Tämä arvo sovitetaan sitten yksitellen eri tapauksissa annettujen vakioarvojen kanssa. Jos vastaavuus löytyy, kaikki kyseisessä tapauksessa määritetyt käskyt suoritetaan yhdessä kaikkien kyseisen tapauksen jälkeen esiintyvien tapausten kanssa, mukaan lukien oletuskäsky. Kahdella tapauksella ei voi olla samanlaisia ​​arvoja. Jos sovitettu tapaus sisältää break-lauseen, kaikki sen jälkeen esiintyvät tapaukset ohitetaan ja ohjaus tulee ulos kytkimestä. Muussa tapauksessa kaikki vastaavaa tapausta seuraavat tapaukset suoritetaan.

Miten C switch -lause toimii?

Käydään läpi vaihe vaiheelta, kuinka kytkinlause toimii C:ssä:

Harkitse seuraavaa vaihtaa lausunto :

C-ohjelma:

 #include int main() { int num = 2; switch (num) { case 1: printf('Value is 1
'); break; case 2: printf('Value is 2
'); break; case 3: printf('Value is 3
'); break; default: printf('Value is not 1, 2, or 3
'); break; } return 0; } 

Lähtö

 Value is 2 

Vaiheittainen prosessi:

  1. The kytkimen muuttuja num arvioidaan. Tässä tapauksessa, yhdellä on alustettu arvo 2 .
  2. The arvioitu numero (2) arvo verrataan vakioihin, jotka on määritetty kunkin tapausmerkin sisällä kytkinlohko .
  3. The vaihtaa lausunto vastaa arvioitu arvo (2) kohdassa määritellyllä vakiolla toinen tapaus (tapaus 2) . Koska vastaavuus löytyy, ohjelma hyppää koodilohkoon, joka liittyy koodiin vastaava tapaus (tapaus 2) .
  4. Kohteeseen liittyvä koodilohko tapaus 2 suoritetaan, mikä tulostaa 'Arvo on 2' konsoliin.
  5. The 'tauko' avainsana on koodilohkossa tapaus 2 . Tämän seurauksena ohjelma katkeaa kytkinkäskystä heti koodilohkon suorittamisen jälkeen.
  6. Ohjelman ohjaus jatkuu sen jälkeen vaihtaa lausunto ja kaikki seuraavat lausunnot vaihtaa lausunto teloitetaan. Tässä tapauksessa vaihdon jälkeen ei ole käskyjä, joten ohjelma päättyy.
  7. The vaihtaa lausunto arvioivat arvon muuttuja num , löysi osuman tapauksen 2 kanssa, suoritti vastaavan koodilohkon ja poistui sitten kytkinlohko läsnäolon vuoksi 'break'-lause .

Esimerkki kytkinkäskystä C:ssä

Katsotaanpa yksinkertainen esimerkki C-kielen vaihtokäskystä.

 #include int main(){ int number=0; printf('enter a number:'); scanf('%d',&number); switch(number){ case 10: printf('number is equals to 10'); break; case 50: printf('number is equal to 50'); break; case 100: printf('number is equal to 100'); break; default: printf('number is not equal to 10, 50 or 100'); } return 0; } 

Lähtö

parafraasi if rudyard kiplingillä
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

Kytkintapauksen esimerkki 2

 #include int main() { int x = 10, y = 5; switch(x>y && x+y>0) { case 1: printf('hi'); break; case 0: printf('bye'); break; default: printf(' Hello bye '); } } 

Lähtö

 hi 

Katko ja oletusavainsana Switch-lauseessa

Selitämme ja määrittelemme 'tauko' ja 'oletusavainsanat'. kytkinkäskyn yhteydessä esimerkkikoodin ja tulosteen kanssa.

1. Katkoavainsana:

The 'break' avainsana käytetään kunkin tapauksen koodilohkossa kytkinkäskyn päättämiseen ennenaikaisesti. Kun ohjelma kohtaa a 'break'-lause kotelon sisällä, se poistuu välittömästi vaihtaa lausunto , joka estää myöhempien tapauslohkojen suorittamisen. The 'break'-lause on ratkaisevan tärkeää vaihtolauseiden välttämiseksi' 'pudota läpi' käyttäytymistä.

Esimerkki:

Otetaan ohjelma ymmärtääksesi käytön taukoavainsana in C.

 #include int main() { int num = 3; switch (num) { case 1: printf('Value is 1
'); break; // Exit the switch statement after executing this case block case 2: printf('Value is 2
'); break; // Exit the switch statement after executing this case block case 3: printf('Value is 3
'); break; // Exit the switch statement after executing this case block default: printf('Value is not 1, 2, or 3
'); break; // Exit the switch statement after executing the default case block } return 0; } 

Lähtö

 Value is 3 

Selitys:

Tässä esimerkissä vaihtaa lausunto arvioi arvon muuttuja num (mikä on 3 ) ja sopii siihen tapaus 3 . Kohteeseen liittyvä koodilohko tapaus 3 suoritetaan, tulostus 'Arvo on 3' konsoliin. The 'break'-lause sisällä tapaus 3 varmistaa, että ohjelma poistuu kytkinkäskystä välittömästi tämän tapauslohkon suorittamisen jälkeen, mikä estää muiden tapausten suorittamisen.

2. Oletusavainsana:

Kun mikään niistä tapausvakiot sovittaa arvioitu ilmaisu , se toimii a kaiken kattava tapaus . Jos vastaavaa tapausta ei ole ja a 'oletus' tapaus on olemassa , koodilohkoon liittyvä 'oletus' tapaus ajetaan. Sitä käytetään usein käsittelemään tilanteita, joissa mikään ilmoitetuista tilanteista ei koske annettua syötettä.

Esimerkki:

Otetaan ohjelma ymmärtääksesi käytön oletusavainsana in C.

 #include int main() { int num = 5; switch (num) { case 1: printf('Value is 1
'); break; case 2: printf('Value is 2
'); break; case 3: printf('Value is 3
'); break; default: printf('Value is not 1, 2, or 3
'); break; // Exit the switch statement after executing the default case block } return 0; } 

Lähtö

 Value is not 1, 2, or 3 

Selitys:

Tässä esimerkissä vaihtaa lausunto tutkii arvon muuttuja num (mikä on 5 ). Koska mikään tapaus ei vastaa numeroa, ohjelma suorittaa koodin, joka liittyy koodiin 'oletus' tapaus . The 'break'-lause sisällä 'oletus' tapaus varmistaa, että ohjelma poistuu vaihtaa lausunto suorittamisen jälkeen 'oletus' tapauslohko.

Molemmat 'tauko' ja 'oletusavainsanat'. niillä on keskeinen rooli kytkinkäskyn suoritusvirran ohjaamisessa. The 'break'-lause auttaa estämään putoamiskäyttäytymistä, kun taas 'oletus' tapaus tarjoaa tavan käsitellä vertaansa vailla olevia tapauksia.

C Switch-lause on läpikuultava

C-kielessä kytkinlause on fall through; se tarkoittaa, että jos et käytä break-lausetta kytkintapauksessa, kaikki tapaukset vastaavan tapauksen jälkeen suoritetaan.

Yritetään ymmärtää kytkinlauseen putoamistila alla olevan esimerkin avulla.

 #include int main(){ int number=0; printf('enter a number:'); scanf('%d',&number); switch(number){ case 10: printf('number is equal to 10
'); case 50: printf('number is equal to 50
'); case 100: printf('number is equal to 100
'); default: printf('number is not equal to 10, 50 or 100'); } return 0; } 

Lähtö

 enter a number:10 number is equal to 10 number is equal to 50 number is equal to 100 number is not equal to 10, 50 or 100 

Lähtö

 enter a number:50 number is equal to 50 number is equal to 100 number is not equal to 10, 50 or 100 

Sisäkkäinen kytkimen tapausseloste

Voimme käyttää niin monta switch-lausetta kuin haluamme switch-käskyn sisällä. Tällaisia ​​lausekkeita kutsutaan sisäkkäisiksi kytkintapauslauseiksi. Harkitse seuraavaa esimerkkiä.

 #include int main () { int i = 10; int j = 20; switch(i) { case 10: printf('the value of i evaluated in outer switch: %d
',i); case 20: switch(j) { case 20: printf('The value of j evaluated in nested switch: %d
',j); } } printf('Exact value of i is : %d
', i ); printf('Exact value of j is : %d
', j ); return 0; } 

Lähtö

 the value of i evaluated in outer switch: 10 The value of j evaluated in nested switch: 20 Exact value of i is : 10 Exact value of j is : 20 

Kytkinlauseen edut:

Siinä on useita etuja vaihtaa lausunto C. Joitakin kytkinlausekkeen tärkeimpiä etuja ovat seuraavat:

    Luettavuus ja selkeys:The vaihtaa lausunto tarjoaa tiiviin ja suoraviivaisen tavan ilmaista monitiehaaroitus koodissa. Useiden tapausten käsitteleminen voi tehdä koodista järjestelmällisemmän ja helpommin luettavan kuin useita sisäkkäisiä if-else-lauseita .Tehokkuus:The vaihtaa lausunto on yleensä tehokkaampi kuin sarja jos-muu-lauseita kun käsitellään useita ehtoja. Se toimii d irect hyppypöytä , mikä tekee siitä nopeamman ja optimoitumman suoritusajan suhteen.Tapauskohtainen logiikka:The vaihtaa lausunto sopii luonnollisesti skenaarioihin, joissa ohjelman on tehtävä päätöksiä yksittäisen muuttujan tiettyjen arvojen perusteella. Se on intuitiivinen ja suoraviivainen tapa toteuttaa tapauspohjaista logiikkaa.

The vaihtaa lausunto tukee oletustapauksen käyttöä, joka toimii a kaiken kattava vaihtoehto arvoille, jotka eivät vastaa mitään annettuja tapauksia. Tämä oletustapaus käsittelee epätavallisia syötteitä tai olosuhteita, joita ei ole nimenomaisesti ilmoitettu.

Kytkinlauseen haitat:

Siinä on useita haittoja vaihtaa lausunto C:ssä. Jotkut switch-lauseen tärkeimmistä haitoista ovat seuraavat:

    Rajoitettuja ilmaisuja:Lausekkeessa käytetty ilmaus vaihtaa lausunto täytyy johtaa an integraaliarvo (char, int, enum) tai yhteensopiva tietotyyppi. Se ei jaksa enempää monimutkaisia ​​tai ei-vakiolausekkeita , rajoittaa sitä joustavuus joissakin skenaarioissa.Kyvyttömyys verrata alueita:Toisin kuin jos-muu-lauseita , vaihtaa lausunto ei voi käsitellä arvoalueita suoraan. Jokainen kytkinkäskyn tapaus edustaa tiettyä vakioarvoa, mikä tekee arvoalueen tehokkaasta käsittelystä haastavaa.Ei tukea liukulukuille:The vaihtaa lausunto vain hyväksyy integraalityypit (kokonaisluvut) ja arvot alkaen enums ; se ei hyväksy liukulukuja. Se ei käsittele ei-integroidut tietotyypit Kuten liukulukukokonaisluvut , mikä saattaa olla ongelmallista joissain olosuhteissa.Putoamiskäyttäytyminen: Vaihda lausuntoja omistaa 'pudota läpi' oletusarvoisesti käyttäytyminen, mikä tarkoittaa, että jos tapaus ei sisällä a 'break'-lause , toteutus tulee 'pudota läpi' seuraavaan tapauslohkoon. Jos sitä ei hoideta asianmukaisesti, tämä voi johtaa ei-toivottuun toimintaan.Päällekkäinen koodi:Käyttää vaihtaa lausunto saattaa joissakin olosuhteissa johtaa päällekkäiseen koodiin, varsinkin kun useat tapaukset vaativat samoja toimia. Jos sitä ei hallita oikein, tämä voi johtaa koodin päällekkäisyyteen.Sisäkkäisistä kytkimistä voi tulla monimutkaisia:Kun ollaan tekemisissä sisäkkäisiä vaihtaa lausuntoja , koodista voi tulla monimutkainen ja vähemmän luettava. Tällaisten sisäkkäisten rakenteiden ymmärtäminen ja ylläpitäminen saattaa vaatia lisäponnistuksia.