複製鏈接
請複製以下鏈接發送給好友

switch

(計算機語言關鍵字)

鎖定
Switch在一些計算機語言中是保留字,其作用大多情況下是進行判斷選擇。以C語言來説,switch(開關語句)常和case break default一起使用。
中文名
開關語句
外文名
switch
屬    性
計算機語言保留字
類    別
選擇結構語句
功    能
判斷選擇
關聯詞
case break default

目錄

switch典型結構

switch(controllingExpression)
{
    case constantExpression1:statement1
    case constantExpression2:statement2
    case constantExpression3:statement3
    
    default:statement
}

switch語法

C語言程序語句
Switch用在編程中,如C語言中它經常跟Case一起使用,是一個判斷選擇代碼。其功能就是控制流程流轉的。
直線翻譯:switch語句,即“切換”語句;case即“情況”。
switch語句的語法如下(switch,case,break和default是關鍵字):
switch ( 變量表達式 )
{
	case 常量1 :語句;break;
	case 常量2 :語句;break;
	case 常量3 :語句;break;
	...
	case 常量n:語句;break;
    
	default :語句;break;
}
當變量表達式所表達的量與其中一個case語句中的常量相符時,就執行此case語句後面的語句,並依次下去執行後面所有case語句中的語句,除非遇到break;語句跳出switch語句為止。如果變量表達式的量與所有case語句的常量都不相符,就執行default語句中的語句。
遵守switch語句規則
switch語句非常有用,但在使用時必須謹慎。所寫的任何switch語句都必須遵循以下規則:
只能針對基本數據類型中的整型類型使用switch,這些類型包括int、char等。對於其他類型,則必須使用if語句
switch的參數類型不能為實型 。
case標籤必須是常量表達式(constantExpression),如42或者'4'。
case標籤必須是唯一性的表達式;也就是説,不允許兩個case具有相同的值。
C語言switch應用例子:
例一:
#include<stdio.h>
int main()
{
    double score;
    printf("請輸入分數:\n");
    scanf("%lf",&score);
    switch((int)(score/10))
    {    
        case 10:    
        case 9:printf("A(最好)\n");break;    
        case 8:printf("B(優秀)\n");break;    
        case 7:printf("C(良好)\n");break;    
        case 6:printf("D(及格)\n");break;    
        case 5:
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:printf("E(不及格)\n");break;
        default:printf("Error!\n");
    }
}


例二:
#include<stdio.h>
int main()
{
    char rank;
    printf("請輸入分數等級:(A、B、C、D、E)\n");
    scanf("%c",&rank);
    switch(rank)
    {
        case'A':printf("A(90~100)\n");break;
        case'B':printf("B(80~89)\n");break;
        case'C':printf("C(70~79)\n");break;
        case'D':printf("D(60~69)\n");break;
        case'E':printf("E(0~59)\n");break;
        default:printf("error!\n");break;
    }
}

例三:
輸入年月日,判斷這一天是這一年的第幾天。
#include<stdio.h>
int main()
{
    int year,month,date,leap,days = 0;
    printf("請輸入年份:");
    scanf("%d",&year);
    printf("請輸入月份:");
    scanf("%d",&month);
    printf("請輸入日:");
    scanf("%d",&date);
    leap=(year%4==0&&year%100!=0||year%400==0);
    switch(month)
    {
        case 12:days+=30;
        case 11:days+=31;
        case 10:days+=30;
        case 9:days+=31;
        case 8:days+=31;
        case 7:days+=30;
        case 6:days+=31;
        case 5:days+=30;
        case 4:days+=31;
        case 3:days+=28+leap;
        case 2:days+=31;
        case 1:days+=date;break;
        default:printf("data error");break;
    }
    printf("%4d年%2d月%2d日是這一年的第%d天。\n",year,month,date,days);
    return 0;
}

C# Switch語句
在C#中,switch語句的控制表達式只能是某個整形(int,char,long等)或string。其他任何類型(包括float和double類型)只能用if語句。
每個constantExpression值都必須唯一,使controllingExpression只能與它們中的一個匹配。如果controllingExpression的值和任何controllingExpression的值都不匹配,也沒有default標籤,程序就從switch的結束大括號之後的第一個語句繼續執行 [1] 
實例:
switch (current)
{
	case '<':
		target.Text += "<";
		break;
	case '>':
		target.Text += ">";
		break;
	case '&':
		target.Text += "&";
		break;
	case '\"':
		target.Text += """;
		break;
	case '\'':
		target.Text += "'";
		break;
        
	default:
		target.Text += current;
		break;
}
JavaScript Switch 語句
如果希望選擇執行若干代碼塊中的一個,你可以使用 switch 語句:
語法:
switch (n)
{ 
	case 1: 執行代碼塊1 break
	case 2: 執行代碼塊2 break
    
	default: 如果n即不是1也不是2,則執行此代碼 
}
工作原理:switch 後面的 (n) 可以是表達式,也可以(並通常)是變量。然後表達式中的值會與 case 中的數字作比較,如果與某個 case 相匹配,那麼其後的代碼就會被執行。break 的作用是防止代碼自動執行到下一行。
實例:
<scripttype="text/javascript">//Youwillreceiveadifferentgreetingbased//onwhatdayitis.NotethatSunday=0,
//Monday=1,Tuesday=2,etc.vard=newDate()theDay=d.getDay()switch(theDay)
{case5:document.write("FinallyFriday")breakcase6:
document.write("SuperSaturday")breakcase0:
document.write("SleepySunday")breakdefault:
document.write("I'mlookingforwardtothisweekend!")}
</script>

switch 語句和具有同樣表達式的一系列的 IF 語句相似。很多場合下需要把同一個變量(或表達式)與很多不同的值比較,並根據它等於哪個值來執行不同的代碼。這正是 switch 語句的用途。
注: 注意和其它語言不同,continue 語句作用到 switch 上的作用類似於 break。如果在循環中有一個 switch 並希望 continue 到外層循環中的下一個輪迴,用 continue 2。
PHP Switch 語句
如果您希望有選擇地執行若干代碼塊之一,請使用 Switch 語句。
使用 Switch 語句可以避免冗長的 if..elseif..else 代碼塊。
語法
switch (expression)
{
	case label1:
		code to be executed if expression = label1;
		break;
	case label2:
		code to be executed if expression = label2;
		break;
	default:
		code to be executed
	if expression is different
	from both label1 and label2;
}
工作原理:
對錶達式(通常是變量)進行一次計算
把表達式的值與結構中 case 的值進行比較
如果存在匹配,則執行與 case 關聯的代碼
代碼執行後,break語句阻止代碼跳入下一個 case 中繼續執行
如果沒有 case 為真,則使用 default 語句
下面的例子使用兩種不同方法實現同樣的事,一個用一系列的 if 語句,另一個用 switch 語句:
例子1. switch結構
<?php
if($i==0){
echo"iequals0";
}elseif($i==1){
echo"iequals1";
}elseif($i==2){
echo"iequals2";
}
switch($i){
case0:
echo"iequals0";
break;
case1:
echo"iequals1";
break;
case2:
echo"iequals2";
break;
}
?>
例子2. switch結構可以用字符串
<?php
switch($i){
case"apple":
echo"iisapple";
break;
case"bar":
echo"iisbar";
break;
case"cake":
echo"iiscake";
break;
}
?>
為避免錯誤,理解 switch 是怎樣執行的非常重要。switch 語句一行接一行地執行(實際上是語句接語句)。開始時沒有代碼被執行。僅當一個 case 語句中的值和 switch 表達式的值匹配時 php 才開始執行語句,直到 switch 的程序段結束或者遇到第一個 break 語句為止。如果不在 case 的語句段最後寫上 break 的話,php 將繼續執行下一個 case 中的語句段。例如:
<?php
switch($i){
case0:
echo"iequals0";
case1:
echo"iequals1";
case2:
echo"iequals2";
}
?>

這裏如果 $i 等於 0,php 將執行所有的 print 語句,如果 $i 等於 1,php 將執行後面兩條 print 語句。只有當 $i 等於 2 時,才會得到“預期”的結果――只顯示“i equals 2”。所以,別忘了 break 語句就很重要(即使在某些情況下故意想避免提供它們時)。
在 switch 語句中條件只求值一次並用來和每個 case 語句比較。在 elseif 語句中條件會再次求值。如果條件比一個簡單的比較要複雜得多或者在一個很多次的循環中,那麼用 switch 語句可能會快一些。
在一個 case 中的語句也可以為空,這樣只不過將控制轉移到了下一個 case 中的語句。
<?php
switch($i){
case0:
case1:
case2:
echo"iislessthan3butnotnegative";
break;
case3:
echo"iis3";
}
?>

一個 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情況,並且應該是最後一條 case 語句。例如:
<?php
switch($i){
case0:
echo"iequals0";
break;
case1:
echo"iequals1";
break;
case2:
echo"iequals2";
break;
default:
echo"iisnotequalto0,1or2";
}
?>

case 表達式可以是任何求值為簡單類型的表達式,即整型或浮點數以及字符串。不能用數組或對象,除非它們被解除引用成為簡單類型。
switch 支持替代語法的流程控制。更多信息見流程控制的替代語法一節。
<?php
switch($i):
case0:
echo"iequals0";
break;
case1:
echo"iequals1";
break;
case2:
echo"iequals2";
break;
default:
echo"iisnotequalto0,1or2";
endswitch;
?>
switch語句注意事項
switch(exprl){
	case expr2:
		statements;
		break;
	case expr3:
		statements;
		break;
        
    default:
		statements;
		break;
}
switch語句執行時會從上到下根據括號中表達式的值作比較,當某個case語句中的表達式與此值相同時,就執行這個case語句或語句序列,直到遇到break為止。 break語句是必須有的,它用來結束switch語句的執行。如果所有case語句後面的表達式都不等於switch語句的表達式expr1的值川0執行default後面的默認語句序列。不過,default部分是可選的。如果沒有這一部分,並遇到所有case語句都不匹配,那麼,就不作任何處理而進入後續程序段的執行。
可見,一個switch語句可以代替多個if-else語句組成的分支結構,而switch語句從思路上顯得更清晰。
使用switch語句時,要注意expr1必須是符合byte,char,short,int類型的常量表達式,而不能用浮點類型或long類型,//(也不能為一個字符串)。 (jdk7後,允許String)
switch(exprl){
	case expr2:
		statements;
		break;
	case expr3:
		statements;
		break;
	default:
		statements;
		break;
}
switch還有一個用法:
switch(colorNum){
	case 0:
	case 1:
		setBackground(color.green) ;
		break;
	default:
		setBackground(color.black);
		break;
 }
參考資料
  • 1.    John Sharp.Visual C#從入門到精通(第8版):清華大學出版社,2016年:84,85,86,87