logo

Ц Изјава о прекидачу

Наредба свитцх у Ц-у је алтернатива иф-елсе-иф лествици која нам омогућава да извршимо више операција за различите могуће вредности једне променљиве која се зове свитцх променљива. Овде можемо дефинисати различите исказе у више случајева за различите вредности једне променљиве.

Синтакса наредбе свитцх у ц језик је дато у наставку:

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

Правила за наредбу свитцх у језику Ц

  1. Тхе прекидач израза мора бити целобројног или карактерног типа.
  2. Тхе вредност случаја мора бити цео број или карактерна константа.
  3. Тхе вредност случаја може се користити само унутар наредбе свитцх.
  4. Тхе изјава о прекиду у случају прекидача не мора. Није обавезно. Ако у случају није пронађена изјава о прекиду, сви случајеви ће бити извршени након подударања случаја. Познато је као пропасти стање Ц свитцх исказа.

Покушајмо да то разумемо на примерима. Претпостављамо да постоје следеће варијабле.

 int x,y,z; char a,b; float f; 
Валид СвитцхНеважећи прекидачВалид ЦасеНеважећи случај
прекидач (к)прекидач (ф)случај 3;случај 2.5;
прекидач(к>и)прекидач (к+2,5)случај 'а';случај к;
прекидач (а+б-2)случај 1+2;случај к+2;
прекидач(функција(к,и))цасе 'к'>'и';случај 1,2,3;

Дијаграм тока наредбе свитцх у Ц

ток исказа свитцх у ц

Функционисање исказа свитцх цасе

Прво се процењује целобројни израз наведен у наредби свитцх. Ова вредност се затим поклапа једна по једна са константним вредностима датим у различитим случајевима. Ако се пронађе подударање, онда се извршавају сви изрази наведени у том случају заједно са свим случајевима присутним након тог случаја, укључујући подразумевани израз. Ниједна два случаја не могу имати сличне вредности. Ако подударни случај садржи наредбу бреак, онда ће сви случајеви присутни након тога бити прескочени, а контрола излази из прекидача. У супротном, сви случајеви који следе након подударања биће извршени.

Како функционише Ц свитцх изјава?

Хајде да прођемо кроз процес корак по корак како наредба свитцх функционише у Ц:

Узмите у обзир следеће свитцх изјава :

Ц програм:

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

Излаз

 Value is 2 

Процес корак по корак:

  1. Тхе прекидач променљиве бр се оцењује. У овом случају, на једном се иницијализује са вредност 2 .
  2. Тхе процењена нум (2) вредност се упоређује са константама наведеним у свакој етикети случаја унутар блок прекидача .
  3. Тхе свитцх изјава одговара на процењена вредност (2) са константом наведеном у други случај (случај 2) . Пошто постоји подударање, програм скаче на блок кода повезан са одговарајући случај (случај 2) .
  4. Блок кода повезан са случај 2 се извршава, што штампа 'Вредност је 2' на конзолу.
  5. Тхе 'пауза' кључна реч је присутна у блоку кода случај 2 . Као резултат тога, програм излази из наредбе свитцх одмах након извршавања блока кода.
  6. Контрола програма се наставља након свитцх изјава , и све изјаве које следе свитцх изјава се извршавају. У овом случају, након пребацивања нема изјава, па се програм прекида.
  7. Тхе свитцх изјава проценио вредност променљива бр , пронашао подударање са случајем 2, извршио одговарајући блок кода, а затим изашао из блок прекидача због присуства на 'бреак' изјава .

Пример наредбе свитцх у Ц

Хајде да видимо једноставан пример изјаве за пребацивање језика Ц.

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

Излаз

мвц са Јава
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

Пример случаја прекидача 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 '); } } 

Излаз

 hi 

Бреак и Дефаулт кључна реч у Свитцх исказу

Хајде да објаснимо и дефинишемо 'пауза' и 'подразумеване' кључне речи у контексту наредбе свитцх, заједно са примером кода и излаза.

1. Кључна реч паузе:

Тхе 'бреак' кључна реч се користи унутар кодног блока сваког случаја да се прерано прекине наредба свитцх. Када програм наиђе на а 'бреак' изјава унутар блока случаја, одмах излази из свитцх изјава , спречавајући извршење наредних блокова случајева. Тхе 'бреак' изјава је кључно за избегавање свитцх изјава' 'пропасти' понашање.

Пример:

Узмимо програм да разумемо употребу бреак кључна реч у Ц.

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

Излаз

 Value is 3 

Објашњење:

У овом примеру, свитцх изјава процењује вредност променљива бр (која је 3 ) и поклапа се са случај 3 . Блок кода повезан са случај 3 се извршава, штампа 'Вредност је 3' на конзолу. Тхе 'бреак' изјава у склопу случај 3 осигурава да програм изађе из наредбе свитцх одмах након извршавања овог блока случаја, спречавајући извршење било којих других случајева.

2. Подразумевана кључна реч:

Када ниједан од падежне константе поклапа са евалуирани израз , функционише као а свеобухватни случај . Ако не постоји одговарајући случај и а 'подразумевани' случај постоји , блок кода повезан са 'Уобичајено' случај је покренут. Често се користи за решавање околности у којима се ниједна од наведених ситуација не односи на дати улаз.

Пример:

Узмимо програм да разумемо употребу подразумевана кључна реч у Ц.

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

Излаз

 Value is not 1, 2, or 3 

Објашњење:

У овом примеру, свитцх изјава испитује вредност променљива бр (која је 5 ). Пошто ниједан случај не одговара броју, програм извршава блок кода повезан са 'подразумевани' случај . Тхе 'бреак' изјава унутар 'подразумевани' случај осигурава да програм изађе из свитцх изјава након извршења 'Уобичајено' блок предмета.

Оба 'пауза' и 'подразумеване' кључне речи играју битну улогу у контроли тока извршења унутар наредбе свитцх. Тхе 'бреак' изјава помаже у спречавању пропадања, док је 'подразумевани' случај пружа начин за решавање случајева без премца.

Ц Свитцх изјава је пропадна

У језику Ц, наредба свитцх је пропадна; то значи да ако не користите наредбу бреак у случају прекидача, сви случајеви након одговарајућег случаја ће бити извршени.

Покушајмо да разумемо пропадање стања наредбе свитцх на примеру датом у наставку.

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

Излаз

 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 

Излаз

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

Наредба угнежђеног прекидача

Унутар наредбе свитцх можемо да користимо онолико наредби свитцх колико желимо. Такав тип наредби се назива угнежђени наредба свитцх цасе. Размотрите следећи пример.

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

Излаз

 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 

Предности наредбе свитцх:

Постоји неколико предности свитцх изјава у Ц. Неке главне предности наредбе свитцх су следеће:

    Читљивост и јасноћа:Тхе свитцх изјава пружа сажет и директан начин изражавања вишесмерно гранање у коду. Бављење вишеструким случајевима може учинити код организованијим и лакшим за читање од вишеструког угнежђене иф-елсе изјаве .Ефикасност:Тхе свитцх изјава је генерално ефикасније од серије иф-елсе изјаве када се ради о више услова. Ради као д ирецт јумп табле , што га чини бржим и оптимизованијим у погледу времена извршења.Логика заснована на случају:Тхе свитцх изјава природно одговара сценаријима где програм треба да доноси одлуке на основу специфичних вредности једне променљиве. То је интуитиван и директан начин за имплементацију логике засноване на случајевима.

Тхе свитцх изјава подржава коришћење подразумеваног случаја који служи као а свеобухватна опција за вредности које се не подударају ни са једним наведеним случајем. Ово подразумевани случај обрађује необичне уносе или околности које нису изричито наведене.

Недостаци наредбе свитцх:

Постоји неколико недостатака свитцх изјава у Ц. Неки главни недостаци наредбе свитцх су следећи:

    Ограничени изрази:Израз који се користи у свитцх изјава мора резултирати ан интегрална вредност (цхар, инт, енум) или компатибилан тип података. Не може више да се носи сложени или непостојани изрази , ограничавајући своје флексибилност у неким сценаријима.Немогућност поређења опсега:за разлику од иф-елсе изјаве , тхе свитцх изјава не може директно да рукује опсегом вредности. Сваки случај у наредби свитцх представља одређену константну вредност, што чини изазовом ефикасно руковање опсегом вредности.Нема подршке за бројеве са покретним зарезом:Тхе свитцх изјава само прихвата интегрални типови (цели бројеви) и вредности из енумс ; не прихвата бројеве са покретним зарезом. Не подноси се неинтегрални типови података као цели бројеви са покретним зарезом , што може бити проблематично у неким околностима.Пролазно понашање: Пребаците изјаве имати 'пропасти' подразумевано понашање које подразумева да ако случај не укључује а 'бреак' изјава , извршење ће 'пропасти' на следећи блок предмета. Ако се њиме не управља на одговарајући начин, ово може довести до нежељеног понашања.Дупликат кода:Користећи свитцх изјава може довести до дуплирања кода у неким околностима, посебно када бројни случајеви захтевају исте радње. Ако се не управља правилно, ово може довести до дуплицирања кода.Угнежђени прекидачи могу постати сложени:Када се бавите угнездио свитцх изјаве , код може постати сложен и мање читљив. Можда ће бити потребни додатни напори да се разумеју и одржавају такве угнежђене структуре.