PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
老柏(第四)
Senior Member
 
老柏(第四)的大頭照
 

加入日期: Mar 2012
您的住址: 地球
文章: 1,303
想問個關於程式的問題

想問一下下面這個程式有沒有可能造成二次觸發
我想在四種狀態下做4種不一樣的事,4種狀態輪流切換

例如:
全域變數 int aa=0


引用:
作者計時器迴圈
if (aa=3) //第1件事
{
if ( 某事件1條件成立)
aa=0;
}
//----------------------------------
else if (aa=2) //第2件事
{
if ( 某事件2條件成立)
aa=3;
}
//----------------------------------
else if (aa=1) //第3件事
{
if ( 某事件3條件成立)
aa=2;
}
//----------------------------------
else if (aa=0) //第4件事
{
if ( 某事件4條件成立)
aa=1;
}


這樣寫應該不會在一次迴圈中同時觸發兩件事吧???
     
      
__________________
[/url]
老柏                 老柏(第二)

老柏(第三)              老柏(第四)
舊 2016-05-11, 01:46 PM #1
回應時引用此文章
老柏(第四)離線中  
micall.lee
*停權中*
 
micall.lee的大頭照
 

加入日期: Jul 2013
文章: 331
引用:
作者老柏(第四)
想問一下下面這個程式有沒有可能造成二次觸發
我想在四種狀態下做4種不一樣的事,4種狀態輪流切換

例如:
全域變數 int aa=0




這樣寫應該不會在一次迴圈中同時觸發兩件事吧???

程式執行的方式是一行一行往下跑,如果有 if else 就只會有兩種狀況

如果你還用了 else if 之類的,就看你有幾種狀況

不然就是完全不會進入邏輯判斷(如果有處理例外就是會跳到例外去)

他不會因為你設定了全域變數,因為全域變數的變化,就跳回 if else 的開頭,這違反程式是一行一行執行下去的原則
 

此文章於 2016-05-11 01:52 PM 被 micall.lee 編輯.
舊 2016-05-11, 01:49 PM #2
回應時引用此文章
micall.lee離線中  
roger214
New Member
 

加入日期: Jul 2011
文章: 3
引用:
作者老柏(第四)
想問一下下面這個程式有沒有可能造成二次觸發
我想在四種狀態下做4種不一樣的事,4種狀態輪流切換

例如:
全域變數 int aa=0




這樣寫應該不會在一次迴圈中同時觸發兩件事吧???


應該是C語法,邏輯測試中的 = 應該是 == 。

語法可以改為 switch case 比較簡潔,只要每個 case scope多個break,就不會有重複執行的疑慮。
舊 2016-05-11, 01:55 PM #3
回應時引用此文章
roger214離線中  
27681049
Advance Member
 

加入日期: Jul 2012
您的住址: 新竹
文章: 409
不會..... 補滿十個字
舊 2016-05-11, 01:56 PM #4
回應時引用此文章
27681049離線中  
老柏(第四)
Senior Member
 
老柏(第四)的大頭照
 

加入日期: Mar 2012
您的住址: 地球
文章: 1,303
感謝,後來發現是別的地方寫錯

對吼,我都忘了分類可以用switch case ,我還一個一個用IF分類
__________________
[/url]
老柏                 老柏(第二)

老柏(第三)              老柏(第四)
舊 2016-05-11, 02:52 PM #5
回應時引用此文章
老柏(第四)離線中  
麵疙瘩
*停權中*
 

加入日期: Jul 2015
文章: 14
當然會 特別是你用全域

呼叫端如果是multi thread 你這邊沒有lock 如global lock

兩個thread 之間的同步沒弄好 肯定中
舊 2016-05-11, 08:01 PM #6
回應時引用此文章
麵疙瘩離線中  
tseyik
Power Member
 

加入日期: Nov 2006
文章: 560
引用:
作者老柏(第四)
想問一下下面這個程式有沒有可能造成二次觸發
我想在四種狀態下做4種不一樣的事,4種狀態輪流切換

例如:
全域變數 int aa=0




這樣寫應該不會在一次迴圈中同時觸發兩件事吧???

用一行計算式可做的為何要寫這麼長?
舊 2016-05-11, 08:21 PM #7
回應時引用此文章
tseyik離線中  
mickmail99
Basic Member
 

加入日期: Aug 2003
您的住址: 高雄
文章: 27
引用:
作者tseyik
用一行計算式可做的為何要寫這麼長?


好奇,怎樣寫成一行??
__________________
身如風,心如雲,遊蕩玩樂天地間∼
舊 2016-05-12, 03:05 AM #8
回應時引用此文章
mickmail99離線中  
邪神
*停權中*
 

加入日期: Jul 2015
文章: 48
if((aa==3) && (某事件1條件成立))
aa=0;
else if((aa==2) && (某事件2條件成立))
aa=3;
else if((aa==1) && (某事件3條件成立))
aa=2;
else if((aa==0) && (某事件4條件成立))
aa=1;

我猜你的aa=0/1/2/3應該是想要讓這數字輪動
所以要分兩個if
那就不能像上面這樣

此文章於 2016-05-12 03:20 AM 被 邪神 編輯.
舊 2016-05-12, 03:18 AM #9
回應時引用此文章
邪神離線中  
micall.lee
*停權中*
 
micall.lee的大頭照
 

加入日期: Jul 2013
文章: 331
引用:
作者mickmail99
好奇,怎樣寫成一行??

三元運算子 ...

這個請慎用,不是甚麼程式都寫的精簡就是好(深受其害)
舊 2016-05-12, 08:49 AM #10
回應時引用此文章
micall.lee離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是01:41 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。