日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c/c++排坑(3) -- c/c++中的switch语句

發(fā)布時間:2023/12/14 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c/c++排坑(3) -- c/c++中的switch语句 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

switch語句的簡單介紹

一個 switch 語句允許測試一個變量等于多個值時的情況。每個值稱為一個 case,且被測試的變量會對每個 switch case 進行檢查。

switch(expression){case constant-expression :f1();break; // 可選的case constant-expression :f2();break; // 可選的// 您可以有任意數(shù)量的 case 語句default : // 可選的f(); }

這玩意兒其實就是為了代替多種情況下if... else if...的這種嵌套。看上去很簡單對不對,但是新手總會在這里遇到麻煩:

  • constant-expression必須是一個常量或字面量。const關鍵字并不真正表示常量,它只是標識這個變量不可變,其實更接近readonly的含義。比如寫成下面的代碼就會報錯:
const int second = 2; switch(i) { case 1: f1();case second: f2(); //因為second并不是真正的常量,所以這里會報錯 }
  • 上面的代碼還有另外的隱患:一是f1()函數(shù)執(zhí)行之后沒有加break語句,不加break語句就會繼續(xù)執(zhí)行后面的f2。當然也有可能為了特殊設計就是為了執(zhí)行f1然后執(zhí)行f2這種邏輯。但是在絕大多數(shù)情況下,沒加break都意味著錯誤。第二點是沒加default語句。一般建議加一下,這樣來保證默認情況。
  • break有時候會誤用。來猜猜下面的代碼會執(zhí)行什么:
#include <iostream> #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0])) using namespace std; int array[] = {1,2,3,4,5,6,7,8,9};int main() {char c = 'a';char ci = c;int i = 0;bool Jump_out_of_if = true;switch(ci){case 'a':if(true){while(i<9){cout << array[i] << endl;++i;break;}if(Jump_out_of_if)break;while(i<9){cout << array[i] << endl;++i;break;}cout << "未跳出if" << endl;} //代碼原來的意思是想跳出外層ifcout << "成功跳出了if" << endl;break;case 'b':cout << "not output" << endl;break;default:cout << "do nothing" << endl;} }

在給出結果之前,我們先來分析下這段代碼。這段代碼里case 'a'里有幾處都有break語句,一是while循環(huán)里有break語句,二是if語句里有break語句,三是case語句有也break語句。看看下圖的結果。再分析下源代碼,首先while循環(huán)的break會跳出循環(huán),if語句的break會直接跳出case 'a',因為if里面沒有break這一說法。所以后面的 cout << "成功跳出了if" << endl; 語句不會執(zhí)行,所以結果是只打印了一個1。

最后還是不得不吐槽這switch語句的break也太不人性化了,為了極少數(shù)情況,不得不再每個case后加break!!!

See you next time. Happy Coding!!!
我的github

轉載于:https://www.cnblogs.com/dnhua/p/10091771.html

總結

以上是生活随笔為你收集整理的c/c++排坑(3) -- c/c++中的switch语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。