c ++简单,如果语句不检查?

我有一个可以将旋转变成x,y,z的“鼠标读取器”类。 (这是一种第一人称相机)但我不想让人直视他的轴,所以我这样做:

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

我仔细检查,这是完美的,它可以防止你太多上下,但有些时候,它不到91和269,这怎么可能?

谢谢

你已经犯了德摩根定律

换一种说法:

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

我怀疑你想要的是:

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

甚至更清楚:

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

好吧,只是为了调试,试试这个反逻辑。

 if ( (Altitude + MouseCoordChange[1] < 91) && (Altitude + MouseCoordChange[1] > 269) ) { //Do nothing here } else { //Do stuff here } 

范围检查经常发生,所以模板将是有用的:

 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 }