C語言switch語句

2021-09-02 04:22:21 字數 2313 閱讀 3061

既然有了if、else 組合為什麼還需要switch、case 組合呢?

那你既然有了菜刀為什麼還需要水果刀呢?你總不能扛著雲長的青龍偃月刀(又名冷豔鋸)去削蘋果吧。如果你真能做到,關二爺也會佩服你的。^_^。

if、else 一般表示兩個分支或是巢狀表示少量的分支,但如果分支很多的話……還是用switch、case 組合吧。其基本格式為:

switch(variable)

很簡單,但有兩個規則:

每個case 語句的結尾絕對不要忘了加break,否則將導致多個分支重疊(除非有意使多個分支重疊)。

最後必須使用default 分支。即使程式真的不需要default 處理,也應該保留語句:

default :

break;

這樣做並非畫蛇添足,可以避免讓人誤以為你忘了default 處理。

好,再問問:真的就這麼簡單嗎?看看下面的問題:

value1 的值為0.1 行嗎?-0.1 呢?-1 呢?0.1+0.9 呢? 1+2 呢?3/2 呢?『a』呢?「a」呢?變數i(假設i 已經被初始化)呢?null 呢?等等。這些情形希望你親自上機除錯一下,看看到底哪些行,哪些不行。

記住:case 後面只能是整型或字元型的常量或常量表示式(想想字元型資料在記憶體裡是怎麼存的)。

似乎從來沒有人考慮過這個問題,也有很多人認為case 語句的順序無所謂。但事實卻不是如此。如果case 語句很少,你也許可以忽略這點,但是如果case 語句非常多,那就不得不好好考慮這個問題了。比如你寫的是某個驅動程式,也許會經常遇到幾十個case 語句的情況。一般來說,我們可以遵循下面的規則:

1、按字母或數字順序排列各條case 語句。

如果所有的case 語句沒有明顯的重要性差別,那就按a-b-c 或1-2-3 等順序排列case語句。這樣做的話,你可以很容易的找到某條case 語句。比如:

switch(variable)

2、把正常情況放在前面,而把異常情況放在後面。

如果有多個正常情況和異常情況,把正常情況放在前面,並做好注釋;把異常情況放在後面,同樣要做注釋。比如:

switch(variable)

3、按執行頻率排列case 語句:把最常執行的情況放在前面,而把最不常執行的情況放在後面。

最常執行的**可能也是除錯的時候要單步執行的最多的**。如果放在後面的話,找起來可能會比較困難,而放在前面的話,可以很快的找到。

1、簡化每種情況對應的操作。

使得與每種情況相關的**盡可能的精煉。case 語句後面的**越精煉,case 語句的結果就會越清晰。你想想,如果case 語句後面的**整個螢幕都放不下,這樣的**誰也難看得很清晰吧。如果某個case 語句確實需要這麼多的**來執行某個操作,那可以把這些操作寫成乙個或幾個子程式,然後在case 語句後面呼叫這些子程式就ok 了。

一般來說case語句後面的**盡量不要超過20 行。

2、不要為了使用case 語句而刻意製造乙個變數。

case 語句應該用於處理簡單的,容易分類的資料。如果你的資料並不簡單,那可能使用ifelseif 的組合更好一些。

為了使用case 而刻意構造出來的變數很容易把人搞糊塗,應該避免這種變數。

比如:char action = a[0];

switch (action)

這裡控制case 語句的變數是action。而action 的值是取字元陣列a 的乙個字元。但是這種方式可能帶來一些隱含的錯誤。一般而言,當你為了使用case 語句而刻意去造出乙個變數時,真正的資料可能不會按照你所希望的方式對映到case 語句裡。在這個例子中,如果使用者輸入字元陣列a 裡面存的是「const」這個字串,那麼case 語句會匹配到第乙個case上,並呼叫fun1()函式。然而如果這個陣列裡存的是別的以字元c 開頭的任何字串(比如:「col」,「can」),case 分支同樣會匹配到第乙個case 上。但是這也許並不是你想要的結果,這個隱含的錯誤往往使人抓狂。如果這樣的話還不如使用if-else if 組合。比如:

if(0 == strcmp(「const」,a))

else if

三、把default 子句只用於檢查真正的預設情況。

有時候,你只剩下了最後一種情況需要處理,於是就決定把這種情況用default 子句來處理。這樣也許會讓你偷懶少敲幾個字元,但是這卻很不明智。這樣將失去case 語句的標號所提供的自說明功能,而且也喪失了使用default 子句處理錯誤情況的能力。所以,奉勸你不要偷懶,老老實實的把每一種情況都用case 語句來完成,而把真正的預設情況的處理交給default 子句。

C語言switch語句

switch語句 switch 表示式 case 常量表示式 1 語句1 case 常量表示式 2 語句2 case 常量表示式 n 語句n default 語句 n 1 說明 1 switch後面括號內的表示式,其值可以使整形 字元型 列舉型資料 2 應該在執行乙個case 分支後,使流程跳出 s...

C語言 條件語句 switch語句

用於直接處理不同情況下的多路問題。switch語句又可稱為開關語句,其執行流程和多分支if語句類似。switch 表示式 當switch後面的 表示式 的值與某個case後的 常量表示式 的值相同時,就執行該case後面的語句 組 當遇到break語句時,跳出switch語句,轉向執行switch結...

C語言switch語句詳解

include stdio.h void main 這裡沒有用到break.輸入1,得到 abcde 輸入2,得到 bcde 輸入3,得到 cde 問 1,case如果是條件式子,為什麼輸入 2 的時候,與 3 4 不符,也會輸出 cd 2,如果不是條件式子,為什麼輸入 2 的時候,a 又沒能輸出?...