博客專欄

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

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

        發布人:嵌入式Linux 時間:2023-01-12 來源:工程師 發布文章

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

        switch(表達式){

        case 表達式1: 語句1;

        case 表達式2: 語句2;

        case 表達式n: 語句n;

        default: 語句n+1;

        }

        計算表達式的值,然后逐個與case后的表達式值進行比較,當case后的表達式的值與switch表達式的值相等時, 即執行對應case后的語句,然后不再進行判斷,繼續執行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執行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:后面的語句開始執行,但是程序并沒有再執行這條語句后停止,而是繼續執行下面的case語句,包括default,直到程序結束。這是因為我們必須顯式地告訴編譯器停止執行switch中的語句,這可以通過在switch語句內的每個執行單元后指定一個break語句來完成 在大多數條件下一個 case標簽的最后一條語句是break。當遇到 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;

        }

        那么程序員什么時候希望省略 break 語句?如果多個 case 語句都執行相同的功能代碼時,允許程序執行多個 case 標簽!例如輸入學生成績,大于90分為優,大于70分為一般,大于60分為良,小于60分為差,可用以下代碼實現:

        int main(void){

        int score;

        scanf("%d",&score);

        switch (score/10){

        case 10:

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

        case 8:

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

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

        default:printf("差\n");

        }

        return 0;

        }

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

        總結:

        • 在case后的各常量表達式的值不能相同,否則會導致編譯錯誤。

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

        • 所有的case都是"或"or的關系,每時每刻只有一個case會滿足條件。

        • 每個case中的代碼執行完畢后,必須要用break 語句來阻止代碼自動地向下一個case運行。

        • 如果不寫 break 語句的話,下面所有的 case 語句都會執行一遍。

        • 請使用default關鍵詞來規定匹配不存在時做的事情。可省略不寫。



        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: switch case語句

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新沂市| 安塞县| 竹溪县| 湘乡市| 普陀区| 桐梓县| 绍兴市| 甘孜县| 舟山市| 资溪县| 潼关县| 南郑县| 迁西县| 垣曲县| 盱眙县| 阿巴嘎旗| 定南县| 五河县| 万荣县| 仁怀市| 平江县| 二连浩特市| 凤冈县| 牡丹江市| 额敏县| 防城港市| 正镶白旗| 比如县| 盖州市| 麻栗坡县| 武夷山市| 衡水市| 东明县| 水城县| 吉木萨尔县| 汶上县| 凌云县| 松滋市| 陆丰市| 湘潭县| 云安县|