色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > Linux C - C基礎(chǔ)篇四(switch case語句)

          Linux C - C基礎(chǔ)篇四(switch case語句)

          發(fā)布人:嵌入式Linux 時(shí)間:2023-01-12 來源:工程師 發(fā)布文章

          多層嵌套的 if-else 語句在語法上是正確的,但邏輯上卻沒有正確地表達(dá)程序員的意圖,例如,意料之外的 else-if 更可能不會(huì)注意到而被溜過去;C語言還提供了另一種用于多分支選擇的switch語句,作為一種在一組互斥的項(xiàng)目中做選擇的替代方法,根據(jù)變量的不同取值來執(zhí)行不同的代碼塊。其一般形式為:

          switch(表達(dá)式){

          case 表達(dá)式1: 語句1;

          case 表達(dá)式2: 語句2;

          case 表達(dá)式n: 語句n;

          default: 語句n+1;

          }

          計(jì)算表達(dá)式的值,然后逐個(gè)與case后的表達(dá)式值進(jìn)行比較,當(dāng)case后的表達(dá)式的值與switch表達(dá)式的值相等時(shí), 即執(zhí)行對(duì)應(yīng)case后的語句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語句。

          int main(void){

          int a;

          scanf("%d",&a);

          switch (a){

          case 1:printf("Monday\n");

          case 2:printf("Tuesday\n");

          case 3:printf("Wednesday\n");

          case 4:printf("Thursday\n");

          default:printf("error\n");

          }

          return 0;

          }

          如果我們輸入1,case 1:后面的語句開始執(zhí)行,但是程序并沒有再執(zhí)行這條語句后停止,而是繼續(xù)執(zhí)行下面的case語句,包括default,直到程序結(jié)束。這是因?yàn)槲覀儽仨氾@式地告訴編譯器停止執(zhí)行switch中的語句,這可以通過在switch語句內(nèi)的每個(gè)執(zhí)行單元后指定一個(gè)break語句來完成 在大多數(shù)條件下一個(gè) case標(biāo)簽的最后一條語句是break。當(dāng)遇到 break 語句switch語句被終止。正確的代碼如下:

          int main(void){

          int a;

          scanf("%d",&a);

          switch (a){

          case 1:printf("Monday\n"); break;

          case 2:printf("Tuesday\n"); break;

          case 3:printf("Wednesday\n"); break;

          case 4:printf("Thursday\n"); break;

          default:printf("error\n");

          }

          return 0;

          }

          那么程序員什么時(shí)候希望省略 break 語句?如果多個(gè) case 語句都執(zhí)行相同的功能代碼時(shí),允許程序執(zhí)行多個(gè) case 標(biāo)簽!例如輸入學(xué)生成績(jī),大于90分為優(yōu),大于70分為一般,大于60分為良,小于60分為差,可用以下代碼實(shí)現(xiàn):

          int main(void){

          int score;

          scanf("%d",&score);

          switch (score/10){

          case 10:

          case 9: printf("優(yōu)\n"); break;

          case 8:

          case 7: printf("一般\n"); break;

          case 6:printf("良\n"); break;

          default:printf("差\n");

          }

          return 0;

          }

          把case標(biāo)簽一個(gè)接一個(gè)堆起來,以強(qiáng)調(diào)這種情形代表的是一個(gè)要被匹配的范圍,例如case10和case9為一組,超市score/10等于10或者9,即90分以上的條件。

          總結(jié):

          • 在case后的各常量表達(dá)式的值不能相同,否則會(huì)導(dǎo)致編譯錯(cuò)誤。

          • 在case后,允許有多個(gè)語句,可以不用{}括起來。

          • 所有的case都是"或"or的關(guān)系,每時(shí)每刻只有一個(gè)case會(huì)滿足條件。

          • 每個(gè)case中的代碼執(zhí)行完畢后,必須要用break 語句來阻止代碼自動(dòng)地向下一個(gè)case運(yùn)行。

          • 如果不寫 break 語句的話,下面所有的 case 語句都會(huì)執(zhí)行一遍。

          • 請(qǐng)使用default關(guān)鍵詞來規(guī)定匹配不存在時(shí)做的事情。可省略不寫。



          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: switch case語句

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉