嚴格來說,C語言中的 switch 語句和 if 語句並不總是完全等價,使用 switch 語句實際上是有一定限制的。
相信題主已經對 if/else 以及布林代數有了比較深入的認識,可以對現實世界中的複雜問題,分情況處理了。事實上,在 C 語言中,還有一種分支語句,就是 switch 語句,在介紹它之前,先來考慮這個問題:
這樣的問題,用 if/else 語句非常容易解決,請看如下程式碼:
以上程式碼很好的解決了問題,不過使用C語言中的 switch 語句也是能夠非常簡單的解決問題,switch 語句可以產生具有多個分支的控制流程,它的格式是:
知道了C語言switch語句的格式後,使用它重寫上述程式碼就簡單了,請看:
上面的例子我們傳給 print_day 的引數是 2,所以從“情況2”(case 2) 處開始執行,然後列印 “Tuesday”,接著 break。break 是 C 語言中的關鍵字,它的作用是挑出整個 switch 語句塊。C 語言規定各 case 的常量表達式必須互不相同,各 case 均不等於常量表達式,則進入 default 分支。
通常每個case後面都要加上break語句,但有時候故意不加break來利用這個特性,例如:
這樣一來,輸入 1-5 都會輸出“Weekday”(工作日),輸入6、7則會輸出“Weekend”(週末)。
switch語句不是必不可缺的,顯然可以用一組if..else if…else if…else代替,但是一方面用switch語句會使程式碼更清晰,另一方面,有時候編譯器會對switch語句進行整體最佳化,使它比等價的if/else語句所生成的目的碼效率更高。
另外,由於 switch 語句的 case 後要求是常數,限制了其使用範圍,所以要用其替換
if...else
不過工具是死的,人是活的,switch 語句和 if 語句各有優缺點,只要掌握了,我們應該總是能夠根據實際條件靈活的寫程式碼的。
嚴格來說,C語言中的 switch 語句和 if 語句並不總是完全等價,使用 switch 語句實際上是有一定限制的。
下文將舉例子解釋相信題主已經對 if/else 以及布林代數有了比較深入的認識,可以對現實世界中的複雜問題,分情況處理了。事實上,在 C 語言中,還有一種分支語句,就是 switch 語句,在介紹它之前,先來考慮這個問題:
輸入 1-7 七個數,程式要對應著分別打印出 Monday-Sunday(星期一到星期天)。這樣的問題,用 if/else 語句非常容易解決,請看如下程式碼:
以上程式碼很好的解決了問題,不過使用C語言中的 switch 語句也是能夠非常簡單的解決問題,switch 語句可以產生具有多個分支的控制流程,它的格式是:
知道了C語言switch語句的格式後,使用它重寫上述程式碼就簡單了,請看:
上面的例子我們傳給 print_day 的引數是 2,所以從“情況2”(case 2) 處開始執行,然後列印 “Tuesday”,接著 break。break 是 C 語言中的關鍵字,它的作用是挑出整個 switch 語句塊。C 語言規定各 case 的常量表達式必須互不相同,各 case 均不等於常量表達式,則進入 default 分支。
使用switch語句要注意幾點case 後面跟的必須是常量表達式,因為這個值必須在編譯時計算出來。case 後面跟的常量表達式的值必須是整型,因為浮點型是不能精確比較相等不相等的,整型或字元型則可以,這是由不同型別資料的儲存方式決定的。進入case後如果沒有遇到break語句就會一直往下執行,後面其它case或default下面的語句也會被執行到,直到遇到break,或者執行到整個switch語句塊的末尾。通常每個case後面都要加上break語句,但有時候故意不加break來利用這個特性,例如:
這樣一來,輸入 1-5 都會輸出“Weekday”(工作日),輸入6、7則會輸出“Weekend”(週末)。
switch語句不是必不可缺的,顯然可以用一組if..else if…else if…else代替,但是一方面用switch語句會使程式碼更清晰,另一方面,有時候編譯器會對switch語句進行整體最佳化,使它比等價的if/else語句所生成的目的碼效率更高。
另外,由於 switch 語句的 case 後要求是常數,限制了其使用範圍,所以要用其替換
if...else
語句,需要保證 if 的條件是常數表示式。如果條件表示式很難寫成常數表示式,switch 語句就很難使用了。不過工具是死的,人是活的,switch 語句和 if 語句各有優缺點,只要掌握了,我們應該總是能夠根據實際條件靈活的寫程式碼的。