1. 程式人生 > >switch語句詳解,case後常量表達式僅作為執行入口標誌,不作為條件判斷!

switch語句詳解,case後常量表達式僅作為執行入口標誌,不作為條件判斷!

轉載出處https://blog.csdn.net/fareast8612/article/details/6869956

#include "stdio.h"

void main()
{
int a;
scanf("%d",&a);
switch (a)
{
case 1: printf("A"); 
case 2: printf("B"); 
case 3: printf("C");
case 4: printf("D"); 
default: printf("e\n");
}
}

這裡沒有用到break.
輸入1,得到“ABCDe"
輸入2,得到”BCDe"
輸入3,得到“CDe"

問:
1,case如果是條件式子,為什麼輸入"2"的時候,與"3","4"不符,也會輸出"CD"?

2,如果不是條件式子,為什麼輸入"2"的時候,"A"又沒能輸出?

答:

switch語句的執行流程是:
首先計算switch後面圓括號中表達式的值,然後用此值依次與各個case的常量表達式比較,若圓括號中表達式的值與某個case後面的常量表達式的值相等,就執行此case後面的語句,執行後遇break語句就退出switch語句;若圓括號中表達式的值與所有case後面的常量表達式都不等,則執行default後面的語句,然後退出switch語句,程式流程轉向開關語句的下一個語句。
在switch-case語句中,多個case可以共用一條執行語句,如: 
case 常量表達式1: 
case 常量表達式2: 
case 常量表達式3: 
語句; 
break; 

由此可以看出case語句的作用:
    case後面的常量表達式實際上只起語句標號作用,而不起條件判斷作用

,即“只是開始執行處的入口標號”。

因此,一旦與switch後面圓括號中表達式的值匹配,就從此標號處開始執行,而且執行完一個case後面的語句後,若沒遇到break語句,就自動進入下一個case繼續執行,而不在判斷是否與之匹配,直到遇到break語句才停止執行,退出break語句

    因此,若想執行一個case分之後立即跳出switch語句,就必須在此分支的最後新增一個break語句。