-
switch
(計算機語言關鍵字)
鎖定
- 中文名
- 開關語句
- 外文名
- 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的參數類型不能為實型 。
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語句
每個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"; } ?>
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; }