PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   想問個關於程式的問題 (https://www.pcdvd.com.tw/showthread.php?t=1104259)

老柏(第四) 2016-05-11 01:46 PM

想問個關於程式的問題
 
想問一下下面這個程式有沒有可能造成二次觸發
我想在四種狀態下做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;
}


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

micall.lee 2016-05-11 01:49 PM

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

例如:
全域變數 int aa=0




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

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

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

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

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

roger214 2016-05-11 01:55 PM

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

例如:
全域變數 int aa=0




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


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

語法可以改為 switch case 比較簡潔,只要每個 case scope多個break,就不會有重複執行的疑慮。

27681049 2016-05-11 01:56 PM

不會..... 補滿十個字

老柏(第四) 2016-05-11 02:52 PM

感謝,後來發現是別的地方寫錯

對吼,我都忘了分類可以用switch case ,我還一個一個用IF分類

麵疙瘩 2016-05-11 08:01 PM

當然會 特別是你用全域

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

兩個thread 之間的同步沒弄好 肯定中

tseyik 2016-05-11 08:21 PM

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

例如:
全域變數 int aa=0




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

用一行計算式可做的為何要寫這麼長?

mickmail99 2016-05-12 03:05 AM

引用:
作者tseyik
用一行計算式可做的為何要寫這麼長?


好奇,怎樣寫成一行??

邪神 2016-05-12 03:18 AM

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
那就不能像上面這樣

micall.lee 2016-05-12 08:49 AM

引用:
作者mickmail99
好奇,怎樣寫成一行??

三元運算子 ...

這個請慎用,不是甚麼程式都寫的精簡就是好(深受其害)


所有的時間均為GMT +8。 現在的時間是07:15 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2026。