五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > JavaScript/C語言 Switch 語句用法詳解

JavaScript/C語言 Switch 語句用法詳解

文章來源:365jz.com     點擊數(shù):645    更新時間:2017-12-01 09:04   參與評論
JavaScript Switch 語句
請使用 switch 語句來選擇要執(zhí)行的多個代碼塊之一。
語法

switch(n)
{
case 1:
  執(zhí)行代碼塊 1
  break;
case 2:
  執(zhí)行代碼塊 2
  break;
default:
  n 與 case 1 和 case 2 不同時執(zhí)行的代碼
}

工作原理:首先設置表達式 n(通常是一個變量)。隨后表達式的值會與結構中的每個 case 的值做比較。如果存在匹配,則與該 case 關聯(lián)的代碼塊會被執(zhí)行。請使用 break 來阻止代碼自動地向下一個 case 運行。
實例
顯示今日的周名稱。請注意 Sunday=0, Monday=1, Tuesday=2, 等等:

var day=new Date().getDay();
switch (day)
{
case 0:
  x="Today it's Sunday";
  break;
case 1:
  x="Today it's Monday";
  break;
case 2:
  x="Today it's Tuesday";
  break;
case 3:
  x="Today it's Wednesday";
  break;
case 4:
  x="Today it's Thursday";
  break;
case 5:
  x="Today it's Friday";
  break;
case 6:
  x="Today it's Saturday";
  break;
}

x 的結果:

Today it's Thursday


C 語言 switch 語句

一般形式:

switch(表達式){
    case 常量表達式1:  語句1;
    case 常量表達式2:  語句2;
    …
    case 常量表達式n:  語句n;
    default:  語句n+1;
}

意思是先計算表達式的值,再逐個和case 后的常量表達式比較,若不等則繼續(xù)往下比較,若一直不等,則執(zhí)行default后的語句;若等于某一個常量表達式,則從這個表達式后的語句開始執(zhí)行,并執(zhí)行后面所有case后的語句。
與if語句的不同:If語句中若判斷為真則只執(zhí)行這個判斷后的語句,執(zhí)行完就跳出if語句,不會執(zhí)行其他if語句;
                           而switch語句不會在執(zhí)行判斷為真后的語句之后跳出循環(huán),而是繼續(xù)執(zhí)行后面所有case語句。在每一case語句之后增加break 語句,                            使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應有的結果。

int a;
printf("input
integer number: ");
scanf("%d",&a);
switch
(a){
case
printf("Monday\n");
break;
case
printf("Tuesday\n");
break;
case
printf("Wednesday\n");
break;
case
printf("Thursday\n");
break;
case
printf("Friday\n");
break;
case
printf("Saturday\n");
break;
case
printf("Sunday\n");
break;
default:printf("error\n");
}

注意:
         1.case后的常量表達式不能相同;
         2. case后的語句可以有多個且不用花括號括起來;
          3.case和default子句的先后順序可以先后變動,default子句可以省略不用;     

 

在有多個選擇分支條件的情況下,用if 語句難免會繁瑣且效率不高,此時便是switch語言的用武之地。

     int  i=1;

     switch(i)

{

    case 0:

             printf("0");

    case 1:
            printf("1");

    case 2:

           printf("2");

    default:

           printf("default");

}

     有些人會認為運行的結果是 2, 但是實際情況是  12default.

     這也是初學者常犯的錯誤。按照常理,switch是選擇分支,即滿足那個case 執(zhí)行那個case 塊的語句,但是C語言中的switch有它的個性。來看看MSDN 的定義。

     You can use the break statement  to end processing of a particular case within the switch statement and to branch to the end of the switch statement. Without break,the program continues to the next case, executing the statements until a break or the end of the statement is reached. In some situations, this continuation may be desirable。

     意思是,用break 語句 終止 當前的case ,直接到達switch 的末尾,執(zhí)行完當前case 若有break則跳出switch。

     如果沒有break, 程序繼續(xù)流向下一個case ,直到遇到break,或者 到達了switch末尾。

     所以如果沒有break語句,找到匹配條件的case 后,會從這里繼續(xù)執(zhí)行下面的case 直到最后一個case 或default。

     明白了這個我們在上面的代碼應該這樣寫。

        int  i=1;

     switch(i)

{

    case 0:

             printf("0");

            break;

    case 1:
            printf("1");

           break;

    case 2:

           printf("2");

          break;

    default:

           printf("default");

          break;

}

     這樣就會輸出  1;

     一定要養(yǎng)成良好的習慣,給每一個case 加上break,以免造成疏忽的錯誤。

     但是C語言的這種switch 特性也有它的優(yōu)點。

     比如設置每一個月的天數(shù) Days 可以這樣用switch

     switch(month)

 {

     case 1:

     case 3:

      case 5:

      case 7:

     case 8:
     case 10:

      case 12   :

                  Days=31;

                  break;

     case 2:

                //根據(jù)是否是閏年判斷。

               break;

      case 4:

       case 6:

      case 9:

        case 11:

                     Days=30;

                    break;

     default:    break;

 

}

    這樣便不用給每個case 都寫語句了,case 1 3 5  7 為空,會自動到下一個CASE ,知道case 12 ,執(zhí)行完跳出。

   關于 defaut的位置。

    這個問題相信有一大部分人沒有考慮過,因為常見的程序中default 都在最后,這要造成了一些人認為default 在最后。

    MSDN 的說法:

    There can be at most one default statement. The default statement need not come at the end; it can appear anywhere in the body of the switch statement. In fact it is often more efficient if it appears at the beginning of the switch statement. A case or default label can only appear inside a switch statement. 

   最多有一個default 語句在一個switch 中,default 聲明不一定在末尾,它可以出現(xiàn)在switch的任何地方那個,實際上如果default出現(xiàn)在switch 的開頭會更有效率。

   所以

   int i=2;

   switch(i)

   {

       default :break;

        case 0:

                  printf("0");

                 break;

        case 1:

                 printf("0");

                 break;

        case 2:

               printf(“2”);

              break;

   }   
也是合理的。

  

     關于switch()參數(shù)值的類型。

  

     參數(shù)值類型必須是這幾種類型之一:int,long,short ,byte,char.

    switch為什么只能用int,short,byte,char,long,因為switch 只能使用 int 類型或者是可以轉(zhuǎn)換為 int類型的參數(shù)(char,char 和 int 通過ascii轉(zhuǎn)換)。

     C語言沒有規(guī)定一定是int 類型,但是要求是完整的,因此只能是上面幾種了。

      關于switch 中case 的個數(shù)。

     標準的C編譯器至少允許一個switch中最多257個case 標簽。這是為了允許switch滿足一個字符8位的所有情況,總共是2的8次方256,再加上EOF.

     而Miscrosoft C 編譯器的switch中case 是這樣定義的。

      MSDN :

     Microsoft C does not limit the number of case values in aswitch statement. The number is limited only by the available memory. ANSI C requires at least 257 case labels be allowed in aswitchstatement.

     它不限制case 的個數(shù)。 only limited by available memory.

    關于switch 中聲明變量初始化的問題。

     int i=2;

     switch(i)

     {

        case 1:

                    break;

        case 2:

                   int sum=5;

                   sum=sum*i;

                   printf("%d",sum);

                  break;

         default:

                 break;

    }

   運行的結果是什么呢。有人可能認為是  10,然而這樣寫編譯器會報錯,在VC6,下 為  error C2361: initialization of 'sum' is skipped by 'default' label

  意思是sum變量的初始化被default 跳過 ,沒有被初始化。

   來看MSDN 的說明:

   

   Note   Declarations can appear at the head of the compound statement forming theswitch body, but initializations included in the declarations are not performed. Theswitch statement transfers control directly to an executable statement within the body, bypassing the lines that contain initializations.

   聲明可以出現(xiàn)在switch 塊中復合語句的頭部(這是C語言的規(guī)則,不允許在語句的中間聲明變量,C++可以 ,當然在VC6下可以的通過的,因為它是C/C++的混合編譯器),但是包含在聲明中的初始化不會被執(zhí)行。

    當寫成 int sum;   不報錯,運行結果為  -858993460,隨機的,因為沒有初始化。

    解決的方法為給case 下的語句加上{} 號,便可初始化。

        int i=2;

     switch(i)

     {

        case 1:

                    break;

        case 2:

                 {

                   int sum=5;

                   sum=sum*i;

                  printf("%d",sum);

                  break;

                }

         default:

                 break;

    }

     運行結果為10,已初始化。



如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進入論壇

發(fā)表評論 (645人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關的政策法規(guī),嚴禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學習

業(yè)務咨詢

· 技術支持
· 服務時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權所有 鄂ICP備17013400號