if-else语句中的条件被错误地计算

时间:2013-03-17 15:36:37

标签: c++ c if-statement return conditional-statements

我的一个函数中有这样的东西,它返回false。

if ((X = ax && Y == ay) || (X == bx && Y == ay) || (X == cx && Y == ay) || (X == ax && Y == by) || (X == cx && Y == by) || (X == ax && Y == cy) || (X == bx && Y == cy) || (X == cx && Y == cy))
    return true;
else
    return false;

但是,如果我使用相同的参数调用该函数,但仅将代码更改为此函数,则返回true。

if (X == bx && Y == ay)
    return true;
else
    return false;

为什么会这样?第二个代码中的条件是第一个代码中的条件之一,所以如果其中一个条件为真,它应该返回true,我是对的吗?我希望第一个条件返回true

3 个答案:

答案 0 :(得分:5)

在长条件开始附近的“=”右边需要是“==”!您正在为X分配一个新值,而不仅仅是测试它,这会导致所有其他测试失败。

答案 1 :(得分:4)

=是一个赋值运算符,不小心将它用于比较是一个常见的错误,这也是你的情况。在条件的第一部分:(X = ax && Y == ay),您可以通过为X分配ax来更改if (A || B || C || D) return true; else return false; 的值,然后会影响其余条件的结果。

另请注意:

return (A || B || C || D);

等于:

{{1}}

答案 2 :(得分:3)

if((X = ax && Y == ay) ||  //Problem is here

你需要成功

if((X == ax && Y == ay) || 

X = bxY = ay的代码失败,与第一种情况相同,值ax被分配给{{1 },X,但TRUE不是Y,这使得第一个比较为假。之后的所有比较评估为false,导致第一次测试失败。