switch case 和 if else 的區別和聯絡
switch case 和if else 都表示分支結構
switch中類似goto,有一一對映關係,判斷一次直接跳轉;
if可能進行多次判斷(所以對立事件寫if, else if,而不是if,if;避免多次無效判斷,這也是很多人說switch效率略高if一點的原因,事實上可以忽略不計);
if()
else if()
else if()結構中,只進入一次函式體,即滿足某乙個條件,執行完**後,跳出整個if結構
如:string ifelse(int x )
string strretvalue;
if (x == 1)
strretvalue = "1";
else if (x == 1 || x == 2)
strretvalue = "2";
else if (x == 1)
strretvalue = "3";
return strretvalue;
傳1進入,返回值是「1」,即滿足第乙個條件後,下面兩個else if不會被執行,也不會進行判斷,如果是if if if 則進行三次判斷,結果是「3」,由於只進入一次判定條件,所以正常寫法應直接return value;
switch中,不加break則goto到指定條件之後的整個**體都會執行(穿透效果),所以一般情況下不能忘記加break;(莫名類似 do{}while(0),指定條件跳出);
string ifelse(int x )
string strretvalue;
switch(x)
case 0:
strretvalue = "0";
case 1:
strretvalue = "1";
case 2:
strretvalue = "2";
return strretvalue;
傳1進入,strretvalue 先等於1,然後等於2,返回值為「2」,而且語法沒有問題,不報錯,顯然不對。
穿透的用法:
1、實現多種條件的判斷,如
if(x == 1 || x == 2 || x == 3)
strretvalue = "3";
可以寫成
switch(x)
case 1:
case 2:
case 3:
strretvalue = "3";
break;
2、與do{}while(0)相反
do while(0); 執行前兩行**,break後面的不執行,而利用switch的穿透,可以goto到某一條件開始執行,跳過前面的**;
舉個栗子:
寫方法實現今年累加到本月的天數。(傳入1月,返回31天,傳入2月,返回31+28(29)天,傳入3月,返回31+28(29)+ 31 天)
int getdays(int month)
int nreturnvalue = 0;
switch (month)
case 12: nreturnvalue += 31;
case 11: nreturnvalue += 30;
case 10: nreturnvalue += 31;
case 9: nreturnvalue += 30;
case 8: nreturnvalue += 31;
case 7: nreturnvalue += 31;
case 6: nreturnvalue += 30;
case 5: nreturnvalue += 31;
case 4: nreturnvalue += 30;
case 3: nreturnvalue += 31;
case 2: nreturnvalue += runnian() ? 29 : 28;
case 1: nreturnvalue += 31;
return nreturnvalu;
是我冤枉了你
買了電腦放假回來當然是要上網的了,為了顯示我是專業人士,我用了當時最快的網速2m的adsl當然是電信的了開始了我的網路生涯 當然是家裡的了 和學校的 網咖 裡果然是天淵之別,畢竟是2m的。又過來乙個學期又到假期聽說138圓的公升成3m的了,我又乙個哥們比我還早裝的他當時是1m,從1到2,然後到3,大...
你是我的酒精
前世的輪迴,今生的追憶。只為奈何橋上那無悔的誓言。縱然尋她千百遍,暮然回首,希望伊人已在燈火闌珊處。你好像那56度白酒,我就是那個酒鬼。遇到你,我醉了,從此整個世界都是愛的國度。見不到你,我暈了,從此整個人間都虛無縹緲。你的一句話,讓我不知所措 你的一句話,讓我輾轉反側 你的 一句話,讓我生不如死 ...
你是我的春夏秋冬,我是你的甲乙丙丁
你是我的春夏秋冬,我是你的甲乙丙丁 別試圖走近我一顆心除了他什麼也沒有。曾經以為的天長地久,其實不過是萍水相逢。接納不了乙個人,是因為忘不了另乙個人。乙個人只要不再想要,就什麼都可以放下。所有人對自己都是假的,只有自己對自己是真的。其實狠在乎你,只是沒有說出口而已。謊言,經過包裝有乙個更好聽的名字。...