switch 語句的格式:
switch ( 整型或字符型變量 )
{
case 變量可能值1 :
分支一;
break;
case 變量可能值2 :
分支二;
break;
case 變量可能值3 :
分支三;
break;
...
default :
最后分支;
}
在 switch 的語法里营曼,我們要學到4個關鍵字:switch祈纯、case 、break溢陪、default该肴。
在 switch ( 變量 ) 這一行里膜蠢,變量只能是整型或字符型。程序先讀出這個變量的值届榄,然后在各個"case"里查找哪個值和這個變量相等浅乔,如果相等,就算條件成立铝条,程序執(zhí)行相應的分支靖苇,直到碰上break或者switch語句結束。
了解一下switch,case,break班缰,default的意思贤壁,對理解前面的一切也會有幫助,它們分別是:開關埠忘,情況脾拆,中斷,默認(值)莹妒。那么用一句話套起來的說法就是:根據(jù)開關值的不同名船,執(zhí)行不同的情況,直到遇上中斷旨怠;如果所有的情況都不符合開關值渠驼,那么就執(zhí)行默認的分支。
最后說一下關于switch中非常重要的幾個注意點鉴腻。
第一迷扇、switch ( 整型或字符型變量 ) 中,變量的類型如文中所標爽哎,只能是整型和字符類型谋梭。它們包含 int,char。當然無符類型或不同的長度整型(unsigned int,short,unsigned char)等都可以倦青。另外,枚舉類型(enum)內部也是由整型或字符類型實現(xiàn)盹舞。所以也可以产镐。實型(浮點型)數(shù)就不行隘庄,如:
float a = 0.123;
switch(a) //錯誤!a不是整型或字符類型變量癣亚。
{
....
}
第二丑掺、case 之后可以是直接的常量數(shù)值,如例中的1述雾、2街州、3、4玻孟,也可以是一個使用常量計算式唆缴,如2+2等,但不能是變量或帶有變量的表達式黍翎,如 a * 2等面徽。當然也不能是實型數(shù),如4.1匣掸,或2.0 / 2 等趟紊。
switch(formWay)
{
case 2-1 ://正確
...
case a-2 ://錯誤
...
case 2.0 ://錯誤
...
}
另外,在case 與常量值之后碰酝,需要一個冒號霎匈,請注意不要疏忽。
第三送爸、break 的作用铛嘱。
break 使得程序在執(zhí)行完選中的分支后,可以跳出整個switch語句(即跳到switch接的一對{}之后)碱璃,完成switch弄痹。如果沒有這個break,程序將在繼續(xù)前進到下一分支,直到遇到后面的break或者switch完成嵌器。
比如肛真,假設現(xiàn)在程序進入case 1: 中的分支,但case 1 的分支這回沒有加break:
case 1 :
System.out.println("您是通過搜索引擎來到本網(wǎng)站的爽航。");
case 2 :
System.out.println("您是通過朋友介紹來到本網(wǎng)站的蚓让。");
那么,程序在輸出 "您是通過搜索引擎來到本網(wǎng)站的讥珍。" 之后历极,會繼續(xù)輸出case 2中的 "您是通過朋友介紹來到本網(wǎng)站的。" 衷佃。
請大家將前面實例中的代碼片段改為如下(紅色部分趟卸,即將所有的break都通過加//使之無效。):
...
case 1 :
System.out.println("您是通過搜索引擎來到本網(wǎng)站的。" );
//break;
case 2 :
System.out.println("您是通過朋友介紹來到本網(wǎng)站的锄列。");
//break;
case 3 :
System.out.println("您是通過報刊雜志來到本網(wǎng)站的图云。");
//break;
case 4 :
System.out.println("您是通過其它方法來到本網(wǎng)站的。");
//break;
default :
System.out.println("錯誤的選擇邻邮!請輸入1~4的數(shù)字做出選擇竣况。");
...
運行后,結果會是如何筒严?請大家動手試試丹泉,然后在作業(yè)中回答我。
第四鸭蛙、default是可選中摹恨,前面我們已經(jīng)說過它的用處,及如果沒有default规惰,程序在找不到匹配的case分支后睬塌,將在switch語句范圍內不做什么事,直接完成switch歇万。大家也可以在實例中將default的代碼注釋掉揩晴,然后試運行,并且在選擇時輸入5贪磺。
...
//default :
//cout << "錯誤的選擇硫兰!請輸入1~4的數(shù)字做出選擇。" << endl;
...
第五寒锚、必要時劫映,可在各個case中使用{}來明確產生獨立的復合語句。
前面我們在講if...語句和其它流程控制語句時刹前,都使用{}來產生復合語句:
if (條件)
{
分支一;
}
除非在分支中的語句正好只有一句泳赋,這里可以不需要花括號{}。但在switch的各個case語句里喇喉,我們在語法格式上就沒有標出要使用{}祖今,請看:
switch ( 整型或字符型變量 )
{
case 變量可能值1 :
分支一;
break;
case 變量可能值2 :
....
}
一般教科書上只是說 case 分支可以不使用{},但這里我想提醒大家拣技,并不是任何情況下case分支都可以不加{}千诬,比如你想在某個case里定義一個變量:
switch (formWay)
{
case 1 :
int a=2;//錯誤。由于case不明確的范圍膏斤,編譯器無法在此處定義一個變量徐绑。
...
case 2 :
...
}
在這種情況下,加上{}可以解決問題莫辨。
switch (formWay)
{
case 1 :
{
int a=2;//正確傲茄,變量a被明確限定在當前{}范圍內毅访。
...
}
case 2 :
...
}