平時碰到分支條件判斷最常用的是if else語句,不過有時要是分支條件太多用switch就更直觀,方便一點.先舉兩個簡單的例子.
C++:
int num = 2;
switch(num)
{
case 1:cout<<"one";break;
case 2:cout<<"two";break;
case 3:cout<<"three";break; //break可省略
default:cout<<"default";break; //default 非必須,可以省略
}
C#:
int num = 2;
switch (num)
{
case 1: Console.WriteLine("one"); break;
case 2: Console.WriteLine("two"); break;
case 3: Console.WriteLine("three"); break; //break不能省略
default: Console.WriteLine("default"); break; //default 可省略.
}
C++,C#中swith的用法幾乎是一模一樣了.只有一些細小的差別,C#在C++的基礎上做了一點改進.
1. C++中switch()括號中的變量類型只能是整形或者能默認轉換成整形.比如int,long,bool,char,enum.(當然表達式也行,只要結果符合前面條件).但float,double,string就不行.另外自定義的類型,比如某個class,如果類中有運算符重載,class能默認轉換成int.那也可以.不過大部分時候還少會在switch中用到自定義的類型吧
C#中switch()括號中的變量類型可以是byte,short,int,long,bool,enum另外還有string,這個在C++中是不行的.跟c++一樣,可以用表達式,但float,double是不行的.自定義類型如可轉換也行.
2. C++中break是可以省略的.但這樣容易造成一個問題.如果沒有break當某個分支符合條件執行完了後,會接著執行後面的分支.在上面的例子中,如果break全部去掉.結果會是twothreedefault
而C#要你強制性使用break,不用的話在編譯時就會報錯.這樣就不會犯C++中因忘記寫break而出現的錯誤.
補充:其實也可以用return替換break.只不過return是表示退出整個函數,而break只是退出switch這個語句塊.
如果switch的語句塊中的邏輯比較復雜還可以綜合使用goto語句.
比如
int num = 2;
bool check = false;
switch (num)
{
case 1: Console.WriteLine("one"); break;
case 2: Console.WriteLine("two"); goto label;
case 3: Console.WriteLine("three"); break;
label: default: Console.WriteLine("default"); break;
}
當然很多很多人都說過在寫代碼時盡量另用goto語句,不得萬不得已少用了。