switch case 語句要注意!!!
c語言中的switch case 語句相比大家也是非常的清楚的。
無論是誰,在編寫程式碼的時候都會用到這個語句的
```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
現在我就在這裡從新說明一下這個switch case 語句,這是在我寫程式碼的時候出現的問題,總結出的幾點,如果你遇到了這樣的情況,請注意一下就行了。
第一點 :
大家都是知道的,switch case 這個語句的格式,
switch (變數){
case :
語句1
case :
語句2
default:
語句3
}
這是switch case 語句的通用形式了,今天我們就是討論一下他的這個形式,首先是case 中的break 和 語句問題,
學習過c語言的同學都是知道的要在每一個case 的最後加上一個break語句,就是為了防止他進入下一個case
把下一個case中的語句輸出來
例如 :
這樣的程式我不用說大家都會明白意思,(這不是廢話麼) ,關鍵是重點來了,請問,我沒有加break 語句
這個switch case 語句是如何結束的。
(有人又會想,這也是廢話) 當然是遇到switch case 後面的括號結束的這個語句,所以我在這裡宣告一下:
結束一個switch case 語句是有兩中結束方式的,第一種是遇到switch case 這個語句的括號,第二種是遇到break
這個語句的。
而且在switch case 這個語句中,一定是遵守 先執行case 的語句,最後執行default 語句的,(寫到這裡可以有些人
要罵我了)因為我寫的這個語句是把default 這個語句放在了最後,如果我把這個語句放在了,case 之前這個程式該如何執行,其實這才是我要說明的重點,如果,放在case 前面還是讓你感到不爽的話,可以把這個語句放在case 的中間,就是兩個case 語句的中間,之後你在執行這個語句,看這個語句是如何執行的。
這是我改變程式碼的程式,這個時候我如果輸入一個4,他會不會執行default語句,如果我輸入一個3,他會不會
執行case 3 : 語句呢,
答案是 : 他都會執行,而且他的順序就是先執行case 語句,等到case 語句全部執行完了,他在執行default 語句
最後的結束條件是break語句,在網上有很多的資料上寫著,default 這個語句的後面是不用加break語句的,但是
現在我告訴你,其實實在switch 中的哪一個分支,後面都要加上break語句的,但是由於一般的寫法下,default 後面就是switch 的括號,所以,在default 後面加一個break意義不太大,這樣有的人才說,default 後面的break 是加不加
都行,如果想驗證我的說法是不是正確的,你只要把上面的程式碼default 後面的break 去掉,然後輸入4,看會不會多輸出一些東西來,這樣你就會明白了,break 在default的後面是看情況的。
說道了這裡,我想大家一定是會對這個switch 語句有了一定的瞭解,但是我還想給大家接著介紹一種情況,
便是 : case 中的語句,
我說的語句就是進入case 了,之後會在他的下面執行的語句,你自己有沒有想過,什麼才是一個語句,
什麼是一個變數的宣告,語句包含一個變數的宣告麼?
在這裡我會用程式碼驗證我測試的結果,
這樣的程式碼在編譯的時刻就會出現錯誤 :
標號只能是語句的一部分,而宣告並非語法
在網上有人認為這樣就是出現了,在case 中定義了變數,出現的問題,只要在case中加入括號就可以把這個
錯誤解決掉,而且他還認為由於switch中的case語句在同一個作用域,(因為case語句只是一個標籤,他們共屬於
一個switch語句塊),所以如果在某個case下聲明瞭變數的話,其他的case語句也能看到,這樣的話就可能導致錯誤,例如,在一段程式碼中的case 1 後面還有一個case2的話,且case 2中使用了case 1定義的變數的話,那麼如果執行時,n = 2,swich 直接條轉到case 2 內部,這樣就出現了 i 還沒有初始化的事情了,(變數在宣告實在編譯階段,而變數的賦值則在執行時),如果能執行的話,則在case 2中,i沒有是一個未知的值,所以編譯其直接避免這種事情
發生,就讓其編譯無法通過。
在最後還要宣告一點 , 在switch (num)中的num 是有範圍的,只能是字元,短整,長整,整形。。。