本篇敘述 switch{case: ... case: ... default: ...}
因為是新手篇所以不(ㄌㄢˇ)說(ㄉㄜ˙)明(ㄐㄧㄤˇ)搭配 enum 的用法
switch 這個東西的功能是:藉由一個整數,來決定"跳"到哪個 case(default) 開始執行。
基本與法如下:
/* 假設 i 是一個整數, A,B,C,D表零道(含)以上指令(可以是 {} ),但最後一個 : 後面要有至少一道指令(可以是 {} ) */
switch(i)
{
case 0:
A;
break;
case 1:
B;
break; case 2:
C;
break; default:
D;
break;} // 稱這個為版本1
首先應該會有兩個疑問:break? default?
先說明 default ,就是指所有 case 以外,即其他。
至於 break ,要先說明 case 的意思。 case 是個入口,不是出口,跳到某個 case 後就會一直執行到 switch 結束。
可能這樣講還是沒人懂所以用去掉 break; 的 版本2 跟 版本1 比較:
switch(i)
{
case 0:
A;
case 1:
B;
case 2:
C;
default:
D;
} // 稱這個為版本2
首先說明 版本2 的流程:
若 i == 0 ,則跳到
case 0: 的地方,執行 A;B;C;D; 。
若 i == 1 ,則跳到 case 1: 的地方,執行 B;C;D; 。
若 i == 2 ,則跳到
case 2: 的地方,執行 C;D; 。
若 i 不是任何一個 case ,則跳到 default: 的地方,執行 D; 。
那麼有 break; 的 版本1 則:
若 i == 0 ,則跳到
case 0: 的地方,執行 A;,然後遇到
break; 離開 switch 。
若 i == 1 ,則跳到 case 1: 的地方,執行 B; ,然後遇到 break; 離開 switch 。
若 i == 2 ,則跳到 case 2: 的地方,執行 C; ,然後遇到 break; 離開 switch 。
若 i 不是任何一個 case ,則跳到 default: 的地方,執行 D; ,然後遇到 break; 離開 switch 。
其他要注意的地方
- i 必須是個整數。
- 即舉凡 bool, char, short, int, long, long int, long long, 以及前述的unsigned版本。
- case 後面接的要是常數整數。
- 前面說過A,B,C,D可以是零道指令,例如:
switch(i){
case 0: case 1:
case 2:
C;
break;
default:
D;
}
- 如此,當 i 是 0 或 1或 2 時會執行 C; 然後遇到 break; 離開 switch ,否則執行 D; 然後離開 switch 。
- 在switch裡面宣告的變數在不同 case 中被使用很危險。
- 例如 A; 是 int x=123; , B; 是 x+=111; , 如果直接跳到 case 1: ,等同 x 尚未被宣告(初始化)就被使用了。
- 所有 case 屬於同一個大括號(稱scope)。
- 意思是說沒辦法 A; 有int x; , B; 又有 int x; ,這是重覆宣告。
- default: 是其他。
- 今天就算把 default 拿到最前面, switch 還是會在 i 不是 0,1,2 之一時跳到 default:
要用的話大概就這樣吧(?)