logo

C Perjungimo pareiškimas

Komutatoriaus teiginys C yra alternatyvus if-else-if kopėčių sakinys, leidžiantis atlikti kelias operacijas su skirtingomis galimomis vieno kintamojo, vadinamo perjungimo kintamuoju, reikšmėmis. Čia mes galime apibrėžti įvairius teiginius keliais atvejais skirtingoms vieno kintamojo reikšmėms.

„Switch“ teiginio sintaksė c kalba pateikta žemiau:

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

Komutatoriaus teiginio C kalba taisyklės

  1. The perjungimo išraiška turi būti sveikojo skaičiaus arba simbolio tipo.
  2. The atvejo vertė turi būti sveikasis skaičius arba simbolių konstanta.
  3. The atvejo vertė galima naudoti tik jungiklio teiginyje.
  4. The pertraukos pareiškimas jungiklio atveju nebūtina. Tai neprivaloma. Jei byloje nerasta lūžio sakinio, visi atvejai bus vykdomi esant po suderinto atvejo. Jis žinomas kaip prakristi C jungiklio teiginio būsena.

Pabandykime tai suprasti pavyzdžiais. Darome prielaidą, kad yra šie kintamieji.

 int x,y,z; char a,b; float f; 
Galiojantis jungiklisNetinkamas jungiklisTinkamas atvejisNetinkamas atvejis
jungiklis (x)jungiklis (f)3 atvejis;atvejis 2.5;
jungiklis (x>y)jungiklis (x+2,5)atvejis „a“;atvejis x;
jungiklis (a+b-2)atvejis 1+2;atvejis x+2;
jungiklis (funkc(x,y))atvejis 'x'>'y';atvejis 1,2,3;

Jungiklio teiginio schema C

jungiklio teiginio srautas c

Jungiklio korpuso pareiškimo veikimas

Pirmiausia įvertinama jungiklio sakinyje nurodyta sveikojo skaičiaus išraiška. Tada ši vertė po vieną suderinama su skirtingais atvejais pateiktomis pastoviomis reikšmėmis. Jei randama atitiktis, visi tuo atveju nurodyti teiginiai vykdomi kartu su visais atvejais, esančiais po to, įskaitant numatytąjį sakinį. Dviejų atvejų reikšmės negali būti panašios. Jei suderintame atvejis yra pertraukos sakinys, visi po to esantys atvejai bus praleisti, o valdiklis išeis iš jungiklio. Priešingu atveju bus vykdomi visi atvejai, einantys po suderinto atvejo.

Kaip veikia C jungiklio teiginys?

Pažvelkime žingsnis po žingsnio, kaip jungiklio teiginys veikia C:

Apsvarstykite šiuos dalykus jungiklio pareiškimas :

C programa:

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

Išvestis

 Value is 2 

Žingsnis po žingsnio procesas:

  1. The jungiklio kintamasis nr yra vertinamas. Tokiu atveju, ant vieno yra inicijuojamas su 2 vertė .
  2. The įvertintas skaičius (2) reikšmė lyginamas su konstantomis, nurodytomis kiekvieno atvejo etiketėje viduje jungiklio blokas .
  3. The jungiklio pareiškimas atitinka įvertinta vertė (2) su konstanta, nurodyta antras atvejis (2 atvejis) . Kadangi yra atitiktis, programa pereina prie kodo bloko, susieto su atitinkantis atvejis (2 atvejis) .
  4. Kodo blokas, susietas su 2 atvejis yra vykdomas, kuris spausdinamas „Vertė yra 2“ prie konsolės.
  5. The 'pertrauka' raktinis žodis yra kodo bloke 2 atvejis . Dėl to programa išeina iš jungiklio teiginio iškart po kodo bloko vykdymo.
  6. Programos valdymas tęsiamas ir po to jungiklio pareiškimas , ir visi po to teiginiai jungiklio pareiškimas yra įvykdyti. Šiuo atveju po perjungimo teiginių nėra, todėl programa baigiasi.
  7. The jungiklio pareiškimas įvertino vertę kintamasis nr , rado atitiktį su 2 atveju, įvykdė atitinkamą kodo bloką ir išėjo iš jungiklio blokas dėl buvimo „pertraukos“ teiginys .

Komutatoriaus teiginio pavyzdys C

Pažiūrėkime paprastą C kalbos perjungimo teiginio pavyzdį.

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

Išvestis

sąrašo mazgas java
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

Perjungimo atvejo pavyzdys 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 '); } } 

Išvestis

 hi 

Pertrauka ir numatytasis raktinis žodis „Switch“ teiginyje

Leiskite mums paaiškinti ir apibrėžti 'pertrauka' ir „numatytieji“ raktiniai žodžiai jungiklio teiginio kontekste kartu su pavyzdiniu kodu ir išvestimi.

1. Pertraukos raktinis žodis:

The „pertraukos“ raktinis žodis yra naudojamas kiekvieno atvejo kodo bloke, kad per anksti būtų nutrauktas perjungimo sakinys. Kai programa susiduria su a „pertraukos“ teiginys korpuso bloko viduje, jis iš karto išeina iš jungiklio pareiškimas , neleidžiantis vykdyti tolesnių bylų blokų. The „pertraukos“ teiginys yra labai svarbus norint išvengti perjungimo teiginių 'kritimas' elgesį.

Pavyzdys:

Paimkime programą, kad suprastume, kaip naudoti pertraukos raktinis žodis 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; } 

Išvestis

 Value is 3 

Paaiškinimas:

Šiame pavyzdyje jungiklio pareiškimas vertina vertę kintamasis nr (kuris yra 3 ) ir atitinka jį 3 atvejis . Kodo blokas, susietas su 3 atvejis yra vykdomas, spausdinamas „Vertė yra 3“ prie konsolės. The „pertraukos“ teiginys viduje 3 atvejis užtikrina, kad programa išeis iš jungiklio teiginio iškart po šio atvejo bloko vykdymo, užkertant kelią bet kokių kitų atvejų vykdymui.

2. Numatytasis raktinis žodis:

Kai nė vienas iš atvejo konstantos atitinka įvertinta išraiška , jis veikia kaip a visapusiškas atvejis . Jei nėra atitinkamo atvejo ir a „numatytasis“ atvejis egzistuoja , kodo blokas, susietas su 'numatytas' byla vykdoma. Jis dažnai naudojamas sprendžiant aplinkybes, kai pateiktai įvestiei netaikoma nė viena iš nurodytų situacijų.

Pavyzdys:

Paimkime programą, kad suprastume, kaip naudoti numatytasis raktinis žodis 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; } 

Išvestis

 Value is not 1, 2, or 3 

Paaiškinimas:

Šiame pavyzdyje jungiklio pareiškimas tiria vertę kintamasis nr (kuris yra 5 ). Kadangi nė vienas atvejis neatitinka skaičiaus, programa atlieka kodo bloką, susietą su „numatytasis“ atvejis . The „pertraukos“ teiginys viduje „numatytasis“ atvejis užtikrina, kad programa išeis iš jungiklio pareiškimas įvykdžius 'numatytas' atvejo blokas.

Tiek 'pertrauka' ir „numatytieji“ raktiniai žodžiai vaidina esminį vaidmenį valdant vykdymo eigą per jungiklio sakinį. The „pertraukos“ teiginys padeda išvengti kritimo elgesio, o „numatytasis“ atvejis suteikia galimybę tvarkyti neprilygstamas bylas.

C „Switch“ teiginys yra nukritęs

C kalba jungiklio teiginys yra fall through; tai reiškia, jei nenaudosite pertraukos sakinio perjungimo didžiojoje raidėje, bus vykdomi visi atvejai po atitikimo.

Pabandykime suprasti perjungimo būseną pagal toliau pateiktą pavyzdį.

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

Išvestis

 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 

Išvestis

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

Įdėto jungiklio korpuso pareiškimas

Switch sakinyje galime naudoti tiek jungiklio sakinių, kiek norime. Tokio tipo teiginiai vadinami įdėtaisiais jungiklio atvejo teiginiais. Apsvarstykite toliau pateiktą pavyzdį.

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

Išvestis

 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 

Jungiklio teiginio pranašumai:

Yra keletas privalumų jungiklio pareiškimas C. Kai kurie pagrindiniai jungiklio teiginio pranašumai yra šie:

    Skaitomumas ir aiškumas:The jungiklio pareiškimas suteikia glaustą ir paprastą būdą išreikšti daugiakryptis išsišakojimas kode. Nagrinėjant kelis atvejus, kodas gali būti sutvarkytas ir lengviau skaitomas nei keli įdėtieji if-else teiginiai .Efektyvumas:The jungiklio pareiškimas paprastai yra efektyvesnis nei serija jei-kita teiginiai kai susiduriama su keliomis sąlygomis. Jis veikia kaip d tiesus šokinėjimo stalas , todėl jis yra greitesnis ir labiau optimizuotas vykdymo laiko atžvilgiu.Atvejo logika:The jungiklio pareiškimas natūraliai tinka scenarijus, kai programai reikia priimti sprendimus, pagrįstus konkrečiomis vieno kintamojo reikšmėmis. Tai intuityvus ir paprastas būdas įgyvendinti atvejo logiką.

The jungiklio pareiškimas palaiko numatytąjį atvejį, kuris naudojamas kaip a visapusiškas variantas reikšmėms, kurios neatitinka jokių pateiktų atvejų. Tai numatytasis atvejis tvarko neįprastus duomenis ar aplinkybes, kurios nėra aiškiai nurodytos.

Jungiklio teiginio trūkumai:

Yra keletas trūkumų jungiklio pareiškimas C. Kai kurie pagrindiniai jungiklio teiginio trūkumai yra šie:

    Ribotos išraiškos:Išraiška, naudojama jungiklio pareiškimas turi baigtis an integrali reikšmė (char, int, enum) arba suderinamo duomenų tipo. Jis negali susidoroti su daugiau sudėtingos arba nepastovios išraiškos , ribojant jos lankstumas kai kuriais atvejais.Neįmanoma palyginti diapazonų:Skirtingai nei jei-kita teiginiai , jungiklio pareiškimas negali tiesiogiai tvarkyti verčių diapazonų. Kiekvienas jungiklio teiginio atvejis reiškia konkrečią pastovią vertę, todėl sunku efektyviai tvarkyti verčių diapazoną.Slankaus kablelio skaičiai nepalaikomi:The jungiklio pareiškimas tik priima integralų tipai (sveikieji skaičiai) ir vertybes nuo enums ; jis nepriima slankiojo kablelio skaičių. Netvarko neintegralūs duomenų tipai Kaip slankiojo kablelio sveikieji skaičiai , o tai tam tikromis aplinkybėmis gali sukelti problemų.Kritimo elgesys: Perjungti teiginius turėti 'kritimas' elgesys pagal numatytuosius nustatymus, o tai reiškia, kad jei atvejis neapima a „pertraukos“ teiginys , vykdymo valia 'prakristi' į kitą atvejų bloką. Jei nebus tinkamai valdoma, tai gali sukelti nepageidaujamą elgesį.Pasikartojantis kodas:Naudojant a jungiklio pareiškimas tam tikromis aplinkybėmis gali pasikartoti kodas, ypač kai daugeliu atvejų reikia atlikti tuos pačius veiksmus. Jei netinkamai valdysite, kodo dubliavimasis gali atsirasti.Įdėti jungikliai gali tapti sudėtingi:Kai susiduriama su įdėtas perjungti teiginius , kodas gali tapti sudėtingas ir mažiau skaitomas. Norint suprasti ir išlaikyti tokias įdėtas struktūras, gali prireikti papildomų pastangų.