c/c++排坑(3) -- c/c++中的switch语句
switch語句的簡單介紹
一個(gè) switch 語句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況。每個(gè)值稱為一個(gè) case,且被測(cè)試的變量會(huì)對(duì)每個(gè) switch case 進(jìn)行檢查。
switch(expression){case constant-expression :f1();break; // 可選的case constant-expression :f2();break; // 可選的// 您可以有任意數(shù)量的 case 語句default : // 可選的f(); }這玩意兒其實(shí)就是為了代替多種情況下if... else if...的這種嵌套。看上去很簡單對(duì)不對(duì),但是新手總會(huì)在這里遇到麻煩:
- constant-expression必須是一個(gè)常量或字面量。const關(guān)鍵字并不真正表示常量,它只是標(biāo)識(shí)這個(gè)變量不可變,其實(shí)更接近readonly的含義。比如寫成下面的代碼就會(huì)報(bào)錯(cuò):
- 上面的代碼還有另外的隱患:一是f1()函數(shù)執(zhí)行之后沒有加break語句,不加break語句就會(huì)繼續(xù)執(zhí)行后面的f2。當(dāng)然也有可能為了特殊設(shè)計(jì)就是為了執(zhí)行f1然后執(zhí)行f2這種邏輯。但是在絕大多數(shù)情況下,沒加break都意味著錯(cuò)誤。第二點(diǎn)是沒加default語句。一般建議加一下,這樣來保證默認(rèn)情況。
- break有時(shí)候會(huì)誤用。來猜猜下面的代碼會(huì)執(zhí)行什么:
在給出結(jié)果之前,我們先來分析下這段代碼。這段代碼里case 'a'里有幾處都有break語句,一是while循環(huán)里有break語句,二是if語句里有break語句,三是case語句有也break語句。看看下圖的結(jié)果。再分析下源代碼,首先while循環(huán)的break會(huì)跳出循環(huán),if語句的break會(huì)直接跳出case 'a',因?yàn)閕f里面沒有break這一說法。所以后面的 cout << "成功跳出了if" << endl; 語句不會(huì)執(zhí)行,所以結(jié)果是只打印了一個(gè)1。
最后還是不得不吐槽這switch語句的break也太不人性化了,為了極少數(shù)情況,不得不再每個(gè)case后加break!!!
See you next time. Happy Coding!!!
我的github
轉(zhuǎn)載于:https://www.cnblogs.com/dnhua/p/10091771.html
總結(jié)
以上是生活随笔為你收集整理的c/c++排坑(3) -- c/c++中的switch语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小明加密通道进入_门禁系统跟闸机通道的区
- 下一篇: 吉他的那些事--------------