2012-10-07 55 views
1

我有一個'鼠標讀取器'類,它可以將旋轉變成x,y,z。 (這是一種第一人稱視角的),但我不希望人直接在他的軸看,所以我這樣做:C++簡單如果語句不檢查?

if (!(Altitude + MouseCoordChange[1] > 269) && !(Altitude + MouseCoordChange[1] < 91)) 
{ 

我couted檢查,它是完美的,它阻止你太過分很多上下,但有些時候,它不到91和269,這怎麼可能?

謝謝

+1

你爲什麼寫'如果((A> b))'?如果(a <= b)'直接...' – LihO

+0

你寫了'if(!(a> 269)&&!(a <91))'......如果它應該是範圍檢查,簡單地說:'if(a> = 91 && a <= 269)' – LihO

回答

2

你已經愛上的,換句話說De Morgen's Law

犯規:!!!

一個& & B =(A || B)

我懷疑什麼你想要的是:

if (!((Altitude + MouseCoordChange[1] > 269) || 
     (Altitude + MouseCoordChange[1] < 91))) 
{ 

甚至更​​清楚:

if ((Altitude + MouseCoordChange[1] <= 269) && 
    (Altitude + MouseCoordChange[1] >= 91))) 
{ 
+0

請注意'!(a < b)' = '(a > = b)' – LihO

+0

同樣的問題發生了 –

+0

雖然這不是解決方案,但是這引導了我。 –

1

好吧,只是爲了調試,試試這個反邏輯。

if ( (Altitude + MouseCoordChange[1] < 91) && (Altitude + MouseCoordChange[1] > 269) ) 
{ 

    //Do nothing here 
} 
else 
{ 

    //Do stuff here 

} 
1

範圍檢查常有發生這樣的模板將是有用:

template< typename _T > bool inrange(_T first, _T last, _T value) 
{ 
    return ((value>=first) && (value<=last)); 
} 

你的情況:

if (inrange(91, 269, (Altitude + MouseCoordChange[1])) 
{ 
    //is in the range - do something 
} 
else 
{ 
    //is outside the range - do something 
} 
+0

嗯,我得到一個錯誤,如果我使用該功能: –

+0

沒有等待,我的壞,我需要浮動到第一個值的inrange。 –

+0

@MiguelP:你得到什麼錯誤?編譯器應該從參數中推斷出類型,所以如果它是一個類型錯誤,嘗試將最後一個parm轉換爲int,就像這樣:'(int)(Altitude + MouseCoordChange [1])' – slashmais