c ++简单if语句不检查?

时间:2012-10-07 08:12:29

标签: c++ windows if-statement 3d mouse

我有一个'鼠标阅读器'类,它可以将旋转转换为x,y,z。 (这是一种第一人称相机)但我不希望这个人直接看他的轴,所以我这样做了:

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

我做了检查,这很完美,它可以防止你上下太多,但有时候,它会低于91和269,这怎么可能?

谢谢

3 个答案:

答案 0 :(得分:2)

你对De Morgen's Law

犯规了 换句话说,

!A&amp;&amp; !B =!(A || B)

我怀疑你想要的是:

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

甚至更清楚:

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

答案 1 :(得分:1)

好的,只是为了调试,试试这个逆逻辑。

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

  //Do nothing here
}
else
{

  //Do stuff here

}

答案 2 :(得分: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
}