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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6062|回復: 29
打印 上一主題 下一主題
收起左側

請教C語言SWITCH語句流程的問題

  [復制鏈接]
跳轉到指定樓層
樓主
ID:47286 發表于 2020-10-19 18:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
教材上都說if.....else if是挨著找 有多少個else if就找多少個 而 switch是直接跳轉 我想問的是 假設有5個case 而要查找的值在這5個case之外 那么這個語句是把12345都搜一遍發現沒有才走default還是直接就去default了 它怎么知道查找值在不在范圍內
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:641187 發表于 2020-10-19 18:16 | 只看該作者
程序是從上往下讀取的,應該也是一個一個的從case1234往下讀吧,最后都不滿足才會是default。不滿足你給的case條件不就是不在它查找范圍啦
回復

使用道具 舉報

板凳
ID:342954 發表于 2020-10-19 18:20 | 只看該作者
都是順序執行的
回復

使用道具 舉報

地板
ID:47286 發表于 2020-10-19 18:35 | 只看該作者
12138黃晨瑞 發表于 2020-10-19 18:16
程序是從上往下讀取的,應該也是一個一個的從case1234往下讀吧,最后都不滿足才會是default。不滿足你給的c ...

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

if.....else if里 如果有20個else if 假設都不是 程序也會走20個 教材里說switch的優點 不就是多分支直接跳轉嗎 每一個case只是個標簽 我能理解假設20個case時 可以直接跳到任何一個 但假設20個都不是呢 它也都掃一遍么
回復

使用道具 舉報

5#
ID:508386 發表于 2020-10-19 19:13 | 只看該作者
和if  else沒啥太大區別  無非是  運行速度快   
不熟的話  沒必要用
回復

使用道具 舉報

6#
ID:267932 發表于 2020-10-19 19:34 | 只看該作者
SWITCH 里嵌套SWITCH ,SWITCH 處理快點,而且有助于程序分析,好多個IF  else 看著都亂
回復

使用道具 舉報

7#
ID:453974 發表于 2020-10-19 19:54 | 只看該作者
要是單論switch程序的執行方式的話,肯定是要從上往下依次執行的。要論if和switch的優缺點的話,只能說各有優劣,無所謂哪個執行時間更短,正常邏輯下執行起來都是微秒級的,只不過if和switch的靈活度不同,光討論執行時間的話,個人感覺沒什么意義
回復

使用道具 舉報

8#
ID:711539 發表于 2020-10-19 19:59 | 只看該作者
直接就去default了。通過switch()語句()中的值匹配標簽case,都不匹配就跑default!
回復

使用道具 舉報

9#
ID:518902 發表于 2020-10-19 20:08 | 只看該作者
switch會一條一條的和你的條件比對
如果是真,就會執行這一條,如果你不加break,還會執行后往下看有沒有符合條件的。
如果加了 就會跳出去。
如果都不符合 才會用default
回復

使用道具 舉報

10#
ID:47286 發表于 2020-10-19 23:34 | 只看該作者
8樓9樓兩位前輩 你倆說的正相反啊 呃。。。。。。。。
回復

使用道具 舉報

11#
ID:88256 發表于 2020-10-19 23:44 | 只看該作者
dzbj 發表于 2020-10-19 18:35
那豈不是和if....else if一樣了 在有很多個選項的時候 效率并不比if語句好啊 為什么還要這么個東西

if ...

就多個選擇的話,你不覺得switch看起來比if簡潔直觀嗎?
回復

使用道具 舉報

12#
ID:47286 發表于 2020-10-20 00:01 | 只看該作者
hhdsdy 發表于 2020-10-19 23:44
就多個選擇的話,你不覺得switch看起來比if簡潔直觀嗎?

哥 咱不討論這個 用法不一樣
回復

使用道具 舉報

13#
ID:88256 發表于 2020-10-20 00:10 | 只看該作者
dzbj 發表于 2020-10-20 00:01
哥 咱不討論這個 用法不一樣

“那豈不是和if....else if一樣了 在有很多個選項的時候 效率并不比if語句好啊 為什么還要這么個東西”
這個是你自己問的,現在竟然說不討論這個了
回復

使用道具 舉報

14#
ID:420836 發表于 2020-10-20 08:02 | 只看該作者
C語言Switch-CASE接連執行一次,直到完成所有情況,然后再執行默認操作。
回復

使用道具 舉報

15#
ID:641187 發表于 2020-10-20 10:02 | 只看該作者
dzbj 發表于 2020-10-19 18:35
那豈不是和if....else if一樣了 在有很多個選項的時候 效率并不比if語句好啊 為什么還要這么個東西

if ...

理論上是這樣的,而且程序都是從上往下讀取的呀,他不能跳著讀的
回復

使用道具 舉報

16#
ID:593233 發表于 2020-10-20 10:44 | 只看該作者
c從上到下依次執行
回復

使用道具 舉報

17#
ID:592807 發表于 2020-10-20 12:09 | 只看該作者
dzbj 發表于 2020-10-19 18:35
那豈不是和if....else if一樣了 在有很多個選項的時候 效率并不比if語句好啊 為什么還要這么個東西

if ...

switch語句如果不在case后面加brea關鍵字的話可以選擇插入執行點,從符合條件的語句開始從上往下執行,知道碰上break或者執行完所有語句自動退出,如果default被放在最前面,所有語句不加break,程序會執行所有的語句。if_else if不行,只要有一個判斷條件符合,其他的else if語句全被失效。
舉個例:”num = 1的話,上面結果是  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;}


回復

使用道具 舉報

18#
ID:47286 發表于 2020-10-20 15:29 | 只看該作者
hhdsdy 發表于 2020-10-20 00:10
“那豈不是和if....else if一樣了 在有很多個選項的時候 效率并不比if語句好啊 為什么還要這么個東西”
...

你誤會了 我意思是說 不討論看著舒服不舒服 只聊switch這家伙怎么干活
回復

使用道具 舉報

19#
ID:47286 發表于 2020-10-20 15:39 | 只看該作者
12138黃晨瑞 發表于 2020-10-20 10:02
理論上是這樣的,而且程序都是從上往下讀取的呀,他不能跳著讀的

你說的這點我有不同看法 我測試過在switch中多分支可以隨便排列 比如3個分支1 3 5 可以1 5 3 也可以5 3 1 結果都是正確的
回復

使用道具 舉報

20#
ID:47286 發表于 2020-10-20 15:47 | 只看該作者
黃youhui 發表于 2020-10-20 12:09
switch語句如果不在case后面加brea關鍵字的話可以選擇插入執行點,從符合條件的語句開始從上往下執行,知 ...

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

每個case都對應break的情況下 switch是對比一下標簽里沒50就過去 還是真進去從1到3找一遍 沒50才跳出

num=50;

switch(num)
{
case 1:
break;

case 2:
break;

case 3:
break;

defalut:
break;
}
回復

使用道具 舉報

21#
ID:47286 發表于 2020-10-20 16:13 | 只看該作者
我個人理解 假設 a=2 分支是 1 2 3

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

那么a=50 分支還是 1 2 3 理論上switch應該也是走一下default然后跳出 但因為沒這么用過 想請教前輩們是不是這樣 比如會匯編的有沒有用匯編看看switch具體怎么走流程的 我是光會用 底層的不了解
回復

使用道具 舉報

22#
ID:392682 發表于 2020-10-20 16:42 | 只看該作者
恩恩,我也是這么理解的。switch CASE,應該是直接跳轉到相應的語句的。感覺是switch在被編譯的時候變成了一些特殊指令,,
回復

使用道具 舉報

23#
ID:834134 發表于 2020-10-26 10:53 | 只看該作者
是按順序case下來的
回復

使用道具 舉報

24#
ID:834651 發表于 2020-10-26 12:21 | 只看該作者
不會都找一邊,case相當于分配標簽,switch發現沒有匹配的會直接default,和數組能達到O(1)的原理一樣。
回復

使用道具 舉報

25#
ID:311846 發表于 2020-10-26 13:57 | 只看該作者
dzbj 發表于 2020-10-19 23:34
8樓9樓兩位前輩 你倆說的正相反啊 呃。。。。。。。。

沒有相反 是你不理解而已
回復

使用道具 舉報

26#
ID:833190 發表于 2020-10-27 08:27 | 只看該作者
dzbj 發表于 2020-10-19 23:34
8樓9樓兩位前輩 你倆說的正相反啊 呃。。。。。。。。

沒有相反,變量與case1,2...依次比較,直到相符,就執行里面的語句,然后break跳出,后面的就不執行了。而if...else if...要依賴前面的條件約束。感覺switch這種和只是多個if不加else是一樣的,但是這樣寫多個if語句明顯不如switch語句來的簡潔明了。
回復

使用道具 舉報

27#
ID:409831 發表于 2020-10-27 09:21 | 只看該作者
一般范圍判斷多用if,精確值用switch。   單個的精確值用IF==
回復

使用道具 舉報

28#
ID:835191 發表于 2020-10-27 15:10 | 只看該作者
同意8樓9樓
回復

使用道具 舉報

29#
ID:828160 發表于 2020-10-27 21:17 | 只看該作者
仿真一下就知道了,看匯編指令,我記得應該是直接跳轉的,好像是ADDPC這條指令
回復

使用道具 舉報

30#
ID:835687 發表于 2020-10-28 16:10 | 只看該作者
按順序查找,不符合就下一條case,一直不符合就最后一行default
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表