2013-03-27 185 views
1

我聲明我的可變功能條件被滿足

int exceedLimit = 0; 

我調用一個函數

compareLimit(selectChannel,exceedLimit); 

此功能檢查選擇信道的當前值,並且如果它超過了當前設定的極限(上限設爲100,下限爲50)。默認情況下,它不應該被觸發,直到用戶改變一些值。

int compareLimit (int channelID, int isLimitExceeded) 
{ 

if (temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit || temperatureChannel[channelID].currentTemperature < temperatureChannel[channelID].lowLimit) 
    isLimitExceeded = 2;  
else 
    isLimitExceeded = 1; 

return isLimitExceeded; 

} 

現在,這裏是在下一行代碼的問題....在前面的功能我回到isLimitExceeded,然後我嘗試在返回的值相匹配,以確定是否報警狀態應該引起OT沒有。這個if語句compareLimit後立即書面

if (exceedLimit = 2) 
      logSubsystem(); 

當我運行這個程序,我exceedLimit立即觸發和我logsubsystem函數被調用...但是這怎麼可能,因爲我在我的cpp文件的開頭聲明exceedLimit = 0 ??

+3

經典錯誤:'exceedLimit = 2'需要多一個'='。 – cnicutar 2013-03-27 21:32:07

+0

'if(exceedLimit = 2)' - >'if(exceedLimit == 2)' – imreal 2013-03-27 21:32:11

+0

[這就是爲什麼我要投票並關閉。](http://meta.stackexchange.com/questions/167342/ close-all-the-typo-questions) – 2013-03-27 21:35:10

回答

6

if (exceedLimit = 2)應該是if (exceedLimit == 2)

if (exceedLimit = 2)在這裏你要指定其值與價值到exceedLimit不能及的。

注意返回指定的值,在這種情況下if(exceedLimit = 2)轉讓的表達將永遠真正,這就是爲什麼if語句總是執行的下面的代碼。

+3

如果你在最現代化的編譯器上設置了足夠高的警告級別,它會向你發出警告。古老的學校避免這個問題的方式是顛倒過來。即如果(2 = exceedLimit)會在你不使用==的情況下選擇錯誤。 – 2013-03-27 21:34:20

+0

即使我這樣做,它立即進入警報,當我啓動程序。發佈答案的上一張海報建議將其寫爲:exceedlimit = compareLimit(selectChannel,exceedLimit),然後使用double equals作爲等價運算符 – 2013-03-27 21:35:16