久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教一個C語言switch語句的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:47286 發表于 2022-2-19 22:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
標準程序

case 1:
a=1;
b=0;
c=10
break;

case 2:
a=0;
b=1;
c=10;
break;

可見c=10是相同的 問題是 如何把相同的行只寫一次 以前看過一位高人寫過可我給忘了 而且 找不到那帖子了

我合并了一下是下面這樣 結果都不對 也許就不行吧 可有點不死心啊 求高人給鑒定

case 1:
a=1;
b=0;

case 2:
a=0;
b=1;
c=10;

break;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:625730 發表于 2022-2-19 23:17 | 只看該作者
break不能少,c=10要不寫在swtich外面,要不也不要少。
回復

使用道具 舉報

板凳
ID:47286 發表于 2022-2-19 23:31 | 只看該作者
TEC 發表于 2022-2-19 23:17
break不能少,c=10要不寫在swtich外面,要不也不要少。

感謝回復先 你說的對 老老實實寫就沒問題 我是好奇switch語句有沒有更牛的寫法

假如是if語句 可以嵌套 那么一層里把需要歸并的寫前面就行 但switch語句里假如只有1和2允許修改c值的情況下 寫前面會有問題吧
回復

使用道具 舉報

地板
ID:624769 發表于 2022-2-19 23:41 | 只看該作者
dzbj 發表于 2022-2-19 23:31
感謝回復先 你說的對 老老實實寫就沒問題 我是好奇switch語句有沒有更牛的寫法

假如是if語句 可以嵌套 ...

可以用 goto 但是,不合算,C=10;   要比goto 高效的多。
回復

使用道具 舉報

5#
ID:883242 發表于 2022-2-20 01:51 | 只看該作者
你的寫法確實節約了程序的長度,但是運行時間反而變長了。貼出完整的switch代碼,看看能優化到什么程度,你現在貼出來的代碼如果是全部的話,在switch前面給c賦值就是最優解。
回復

使用道具 舉報

6#
ID:373388 發表于 2022-2-20 09:20 | 只看該作者
不清楚您的完整邏輯,表面看把c寫在switch外面就可以,但仔細分析,從邏輯來看case 3的例外情況呢,所以沒有優化的必要。
回復

使用道具 舉報

7#
ID:47286 發表于 2022-2-20 13:43 | 只看該作者
188610329 發表于 2022-2-19 23:41
可以用 goto 但是,不合算,C=10;   要比goto 高效的多。

感謝回復 從過去的交流得到經驗 你在效率方面的評論毋庸置疑
回復

使用道具 舉報

8#
ID:47286 發表于 2022-2-20 13:53 | 只看該作者
Hephaestus 發表于 2022-2-20 01:51
你的寫法確實節約了程序的長度,但是運行時間反而變長了。貼出完整的switch代碼,看看能優化到什么程度,你 ...

感謝回復

這個問題本來沒有啥完成函數 只是寫程序半路突然冒出個想法 在沒有完整思路的時候 你這也確實是最好的建議
回復

使用道具 舉報

9#
ID:47286 發表于 2022-2-20 13:56 | 只看該作者
xhaity 發表于 2022-2-20 09:20
不清楚您的完整邏輯,表面看把c寫在switch外面就可以,但仔細分析,從邏輯來看case 3的例外情況呢,所以沒 ...

感謝回復

目前看來 各位大佬的建議都是沒必要
回復

使用道具 舉報

10#
ID:624769 發表于 2022-2-20 19:09 來自觸屏版 | 只看該作者
dzbj 發表于 2022-2-20 13:43
感謝回復 從過去的交流得到經驗 你在效率方面的評論毋庸置疑

keil c,在Switch的優化方面是做的比較好的,我曾經為了合并同類項,有過在Switch里面加goto這種很不c的做法,后來發現完全畫蛇添足。你也是實干派,你可以做個實驗,現在這個例子相同的只有一句,你如果想同的有3句以上,不管是內容還是排列順序都一樣的話,在編譯時keil 會自動把他們合并,假定case 1和2有5句相同,2和3有4句相同,keil也會弄出一個最優合并方案,這個你簡單寫一下,編譯后看一下編譯后代碼即可,雖然是匯編,但是簡單的跳轉應該不影響你閱讀。當然有個前提,就是這里說的相同項,必須是從break開始往上倒數,完全一致的相同項,包括順序。
回復

使用道具 舉報

11#
ID:47286 發表于 2022-2-20 20:51 | 只看該作者
188610329 發表于 2022-2-20 19:09
keil c,在Switch的優化方面是做的比較好的,我曾經為了合并同類項,有過在Switch里面加goto這種很不c的 ...

謝謝

一直對keil的優化摸不著頭腦 優化等級里有一個就是重復語句盡量用一個 但使用中效果一般 你這么一提醒是個很好的啟發 而且道理上講得通 “當然有個前提,就是這里說的相同項,必須是從break開始往上倒數,完全一致的相同項,包括順序。” 這句我覺得挺重點的
回復

使用道具 舉報

12#
ID:415064 發表于 2022-2-21 09:16 | 只看該作者
錯了,這樣最終結果當case1時,a=1,b=0,c=10      沒啥特殊的技巧,老老實實寫吧,可以定義個函數,這樣修改C的時候,就不用哪兒都修改
回復

使用道具 舉報

13#
ID:47286 發表于 2022-2-21 09:43 | 只看該作者
wojiaoguogai 發表于 2022-2-21 09:16
錯了,這樣最終結果當case1時,a=1,b=0,c=10      沒啥特殊的技巧,老老實實寫吧,可以定義個函數,這樣 ...

感謝回復 明白
回復

使用道具 舉報

14#
ID:434018 發表于 2022-2-21 14:59 | 只看該作者
switch (x)
{
c=10;
case 1:
           a=1;
           b=0;
break;

case 2:
        a=0;
        b=1;
break;
}
回復

使用道具 舉報

15#
ID:47286 發表于 2022-2-21 18:31 | 只看該作者

感謝你的回復

是我描述問題不夠全面 有誤導嫌疑 我想請教的是當不同分支里有相同指令又有不同指令時 能不能合并和怎么合并分支 因為我自己沒想出來

你提供的回答是正確的 但有時候不能這么用 因為假如case1需要c=10 case2需要C=10 但case3分支里不允許修改c值時 這么寫等于在case3時也把c變量改了

目前得到的大部分意見都是按規矩寫
回復

使用道具 舉報

16#
ID:1003226 發表于 2022-2-23 10:35 | 只看該作者
break;執行完要跳出的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂va在线 | 亚洲成av人片在线观看无码 | 国产日韩免费观看 | 日韩中文欧美 | 国产最新视频在线 | 91视频在线看 | 国产精品综合网 | 亚洲www啪成人一区二区 | 欧美一区二区三区 | 日韩国产精品一区二区三区 | 国产在线精品一区二区 | 久久久久久久久久爱 | 天天操天天玩 | 国产原创视频 | 久草www | 精品国产乱码久久久久久闺蜜 | 欧美亚洲国产日韩 | 人妖videosex高潮另类 | 美女黄视频网站 | 亚洲福利在线视频 | 国产97在线 | 日韩 | 国产高清一区二区三区 | 丁香六月伊人 | 久久成人精品 | 国产中文一区二区三区 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 欧美高清视频一区 | 国产高清久久 | 有码一区| 成人免费视频 | 国产精品视频一区二区三区 | 久久久久久亚洲欧洲 | 91网站在线看 | 人人99| 国产丝袜av | 欧美在线一区二区视频 | 欧美日韩成人 | 国产精品久久久久久久久免费樱桃 | 欧美亚洲综合久久 | 亚洲一区二区三区视频免费观看 | 男女羞羞视频在线看 |