【问题标题】:Condition within the if-else statement being evaluated incorrectly [closed]if-else 语句中的条件被错误评估[关闭]
【发布时间】:2013-03-05 22:48:49
【问题描述】:

我的一个函数中有类似的东西,它返回 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

【问题讨论】:

  • 我不确定这是否是您的问题,但您在第一个条件中缺少等号。
  • 能否请您发布您的实际代码。我无法从您的“类似这些”sn-p 中看到问题。
  • 在第二种情况下尝试if ( (X == bx) && (Y == by) )。否则编译器可能会将其插入为if ( ( (X == bx) && Y ) == by)
  • 这些运算符的优先级是:== > && > || > =

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


【解决方案1】:

= 是一个赋值运算符,不小心将它用于比较是一个常见的错误,这也是你的情况。在您的条件的第一部分:(X = ax && Y == ay) 您通过将 ax 分配给它来更改 X 的值,然后影响其余条件的结果。

还要注意:

if (A || B || C || D)
    return true;
else
    return false;

等于:

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

【讨论】:

  • +1 摆脱“返回真”!
【解决方案2】:
if((X = ax && Y == ay) ||  //Problem is here

你必须做到

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

您的代码因X = bxY = ay 而失败,因为在第一种情况下,值ax 被分配给X,即TRUE,但@987654330 @ 不是 ay,这使得第一次比较为假。之后的所有比较都评估为 false,这会导致第一次测试失败。

【讨论】:

    【解决方案3】:

    长条件开头附近的“=”必须是“==”!您正在为 X 分配一个新值,而不仅仅是对其进行测试,这会导致所有其他测试失败。

    【讨论】:

    • 这能解决问题吗?为什么会导致它是错误的?
    • 是的,看答案的第二句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多