欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 請(qǐng)教C語言SWITCH語句流程的問題 [打印本頁]

作者: dzbj    時(shí)間: 2020-10-19 18:11
標(biāo)題: 請(qǐng)教C語言SWITCH語句流程的問題
教材上都說if.....else if是挨著找 有多少個(gè)else if就找多少個(gè) 而 switch是直接跳轉(zhuǎn) 我想問的是 假設(shè)有5個(gè)case 而要查找的值在這5個(gè)case之外 那么這個(gè)語句是把12345都搜一遍發(fā)現(xiàn)沒有才走default還是直接就去default了 它怎么知道查找值在不在范圍內(nèi)
作者: 12138黃晨瑞    時(shí)間: 2020-10-19 18:16
程序是從上往下讀取的,應(yīng)該也是一個(gè)一個(gè)的從case1234往下讀吧,最后都不滿足才會(huì)是default。不滿足你給的case條件不就是不在它查找范圍啦
作者: hejianmin    時(shí)間: 2020-10-19 18:20
都是順序執(zhí)行的
作者: dzbj    時(shí)間: 2020-10-19 18:35
12138黃晨瑞 發(fā)表于 2020-10-19 18:16
程序是從上往下讀取的,應(yīng)該也是一個(gè)一個(gè)的從case1234往下讀吧,最后都不滿足才會(huì)是default。不滿足你給的c ...

那豈不是和if....else if一樣了 在有很多個(gè)選項(xiàng)的時(shí)候 效率并不比if語句好啊 為什么還要這么個(gè)東西

if.....else if里 如果有20個(gè)else if 假設(shè)都不是 程序也會(huì)走20個(gè) 教材里說switch的優(yōu)點(diǎn) 不就是多分支直接跳轉(zhuǎn)嗎 每一個(gè)case只是個(gè)標(biāo)簽 我能理解假設(shè)20個(gè)case時(shí) 可以直接跳到任何一個(gè) 但假設(shè)20個(gè)都不是呢 它也都掃一遍么
作者: 無衣    時(shí)間: 2020-10-19 19:13
和if  else沒啥太大區(qū)別  無非是  運(yùn)行速度快   
不熟的話  沒必要用
作者: zhai1995    時(shí)間: 2020-10-19 19:34
SWITCH 里嵌套SWITCH ,SWITCH 處理快點(diǎn),而且有助于程序分析,好多個(gè)IF  else 看著都亂
作者: 累不死的狗    時(shí)間: 2020-10-19 19:54
要是單論switch程序的執(zhí)行方式的話,肯定是要從上往下依次執(zhí)行的。要論if和switch的優(yōu)缺點(diǎn)的話,只能說各有優(yōu)劣,無所謂哪個(gè)執(zhí)行時(shí)間更短,正常邏輯下執(zhí)行起來都是微秒級(jí)的,只不過if和switch的靈活度不同,光討論執(zhí)行時(shí)間的話,個(gè)人感覺沒什么意義
作者: 菜鳥yc    時(shí)間: 2020-10-19 19:59
直接就去default了。通過switch()語句()中的值匹配標(biāo)簽case,都不匹配就跑default!
作者: laopihappy123    時(shí)間: 2020-10-19 20:08
switch會(huì)一條一條的和你的條件比對(duì)
如果是真,就會(huì)執(zhí)行這一條,如果你不加break,還會(huì)執(zhí)行后往下看有沒有符合條件的。
如果加了 就會(huì)跳出去。
如果都不符合 才會(huì)用default
作者: dzbj    時(shí)間: 2020-10-19 23:34
8樓9樓兩位前輩 你倆說的正相反啊 呃。。。。。。。。
作者: hhdsdy    時(shí)間: 2020-10-19 23:44
dzbj 發(fā)表于 2020-10-19 18:35
那豈不是和if....else if一樣了 在有很多個(gè)選項(xiàng)的時(shí)候 效率并不比if語句好啊 為什么還要這么個(gè)東西

if ...

就多個(gè)選擇的話,你不覺得switch看起來比if簡潔直觀嗎?
作者: dzbj    時(shí)間: 2020-10-20 00:01
hhdsdy 發(fā)表于 2020-10-19 23:44
就多個(gè)選擇的話,你不覺得switch看起來比if簡潔直觀嗎?

哥 咱不討論這個(gè) 用法不一樣
作者: hhdsdy    時(shí)間: 2020-10-20 00:10
dzbj 發(fā)表于 2020-10-20 00:01
哥 咱不討論這個(gè) 用法不一樣

“那豈不是和if....else if一樣了 在有很多個(gè)選項(xiàng)的時(shí)候 效率并不比if語句好啊 為什么還要這么個(gè)東西”
這個(gè)是你自己問的,現(xiàn)在竟然說不討論這個(gè)了
作者: TTQ001    時(shí)間: 2020-10-20 08:02
C語言Switch-CASE接連執(zhí)行一次,直到完成所有情況,然后再執(zhí)行默認(rèn)操作。
作者: 12138黃晨瑞    時(shí)間: 2020-10-20 10:02
dzbj 發(fā)表于 2020-10-19 18:35
那豈不是和if....else if一樣了 在有很多個(gè)選項(xiàng)的時(shí)候 效率并不比if語句好啊 為什么還要這么個(gè)東西

if ...

理論上是這樣的,而且程序都是從上往下讀取的呀,他不能跳著讀的
作者: 電子愛林    時(shí)間: 2020-10-20 10:44
c從上到下依次執(zhí)行
作者: 黃youhui    時(shí)間: 2020-10-20 12:09
dzbj 發(fā)表于 2020-10-19 18:35
那豈不是和if....else if一樣了 在有很多個(gè)選項(xiàng)的時(shí)候 效率并不比if語句好啊 為什么還要這么個(gè)東西

if ...

switch語句如果不在case后面加brea關(guān)鍵字的話可以選擇插入執(zhí)行點(diǎn),從符合條件的語句開始從上往下執(zhí)行,知道碰上break或者執(zhí)行完所有語句自動(dòng)退出,如果default被放在最前面,所有語句不加break,程序會(huì)執(zhí)行所有的語句。if_else if不行,只要有一個(gè)判斷條件符合,其他的else if語句全被失效。
舉個(gè)例:”num = 1的話,上面結(jié)果是  a = 1+2+3 = 6.下面是a = 0+1 = 1;int a = 0;
switch(num)
{
   case 0:a+=0;
  case 1:a+=1;
  case 2:a+=2;
default:a+= 3;break;
}

if(num == 0){a++0;}
else if(num == 1){a+=1;}
else if(num == 2){a+=2;
eles{a+=3;}



作者: dzbj    時(shí)間: 2020-10-20 15:29
hhdsdy 發(fā)表于 2020-10-20 00:10
“那豈不是和if....else if一樣了 在有很多個(gè)選項(xiàng)的時(shí)候 效率并不比if語句好啊 為什么還要這么個(gè)東西”
...

你誤會(huì)了 我意思是說 不討論看著舒服不舒服 只聊switch這家伙怎么干活
作者: dzbj    時(shí)間: 2020-10-20 15:39
12138黃晨瑞 發(fā)表于 2020-10-20 10:02
理論上是這樣的,而且程序都是從上往下讀取的呀,他不能跳著讀的

你說的這點(diǎn)我有不同看法 我測試過在switch中多分支可以隨便排列 比如3個(gè)分支1 3 5 可以1 5 3 也可以5 3 1 結(jié)果都是正確的
作者: dzbj    時(shí)間: 2020-10-20 15:47
黃youhui 發(fā)表于 2020-10-20 12:09
switch語句如果不在case后面加brea關(guān)鍵字的話可以選擇插入執(zhí)行點(diǎn),從符合條件的語句開始從上往下執(zhí)行,知 ...

感謝 你讓我學(xué)到switch的新用法了 可能很普通 但我過去不知道也沒想過

每個(gè)case都對(duì)應(yīng)break的情況下 switch是對(duì)比一下標(biāo)簽里沒50就過去 還是真進(jìn)去從1到3找一遍 沒50才跳出

num=50;

switch(num)
{
case 1:
break;

case 2:
break;

case 3:
break;

defalut:
break;
}
作者: dzbj    時(shí)間: 2020-10-20 16:13
我個(gè)人理解 假設(shè) a=2 分支是 1 2 3

switch是掃描標(biāo)簽 有2直接到2 沒有2走default
if.....else if是1不滿足看2 2滿足跳出 否則看3

那么a=50 分支還是 1 2 3 理論上switch應(yīng)該也是走一下default然后跳出 但因?yàn)闆]這么用過 想請(qǐng)教前輩們是不是這樣 比如會(huì)匯編的有沒有用匯編看看switch具體怎么走流程的 我是光會(huì)用 底層的不了解
作者: qinshuai    時(shí)間: 2020-10-20 16:42
恩恩,我也是這么理解的。switch CASE,應(yīng)該是直接跳轉(zhuǎn)到相應(yīng)的語句的。感覺是switch在被編譯的時(shí)候變成了一些特殊指令,,
作者: 仰望阡陌    時(shí)間: 2020-10-26 10:53
是按順序case下來的
作者: linghuchongchon    時(shí)間: 2020-10-26 12:21
不會(huì)都找一邊,case相當(dāng)于分配標(biāo)簽,switch發(fā)現(xiàn)沒有匹配的會(huì)直接default,和數(shù)組能達(dá)到O(1)的原理一樣。
作者: 權(quán)威人物    時(shí)間: 2020-10-26 13:57
dzbj 發(fā)表于 2020-10-19 23:34
8樓9樓兩位前輩 你倆說的正相反啊 呃。。。。。。。。

沒有相反 是你不理解而已
作者: i_could_have    時(shí)間: 2020-10-27 08:27
dzbj 發(fā)表于 2020-10-19 23:34
8樓9樓兩位前輩 你倆說的正相反啊 呃。。。。。。。。

沒有相反,變量與case1,2...依次比較,直到相符,就執(zhí)行里面的語句,然后break跳出,后面的就不執(zhí)行了。而if...else if...要依賴前面的條件約束。感覺switch這種和只是多個(gè)if不加else是一樣的,但是這樣寫多個(gè)if語句明顯不如switch語句來的簡潔明了。
作者: xiaoheiniu029    時(shí)間: 2020-10-27 09:21
一般范圍判斷多用if,精確值用switch。   單個(gè)的精確值用IF==
作者: qiandaosanren    時(shí)間: 2020-10-27 15:10
同意8樓9樓
作者: 單片機(jī)研究協(xié)會(huì)    時(shí)間: 2020-10-27 21:17
仿真一下就知道了,看匯編指令,我記得應(yīng)該是直接跳轉(zhuǎn)的,好像是ADDPC這條指令
作者: a505089855    時(shí)間: 2020-10-28 16:10
按順序查找,不符合就下一條case,一直不符合就最后一行default




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1