【问题标题】:Multiple, exclusive, conditions in an if statementif 语句中的多个独占条件
【发布时间】:2020-05-05 03:55:20
【问题描述】:

if 语句中的前两个语句之一为假,但我希望前两个语句都为假,以使代码不运行。请帮忙。

void change(Shore* left, Shore* right, int ex, int can) {
        if (((ex!=left->lastMove[0]) && (can!=left->lastMove[1])) && (left->hasBoat)) {

我也尝试了下面的代码,但也没有用

        if ((ex!=left->lastMove[0] && can!=left->lastMove[1]) && left->hasBoat) {

【问题讨论】:

  • 请提供一个最小的工作示例......在SO的鲨鱼到达这里之前:))
  • And (&&) 表示如果所有参数都为真,则 if 语句将起作用 - 因此,如果其中任何一个参数为假,它将不起作用。或 (||) 表示如果任何参数为真,则 if 语句将起作用 - 所以只有在所有条件都为假时才会起作用。所以你想要的是:if (left->hasBoat) if(ex!=left->lastMove[0] || can!=left->lastMove[0]) 首先检查 hasBoat 和然后检查任何其他条件是否为真。你可以在一个 if 条件下做到这一点,但它会更难阅读:if((ex!=left->lastMove[0] || can!=left->lastMove[0]) && left->hasBoat)
  • 这并不能解决问题,但大多数括号是不需要的。您可以像这样编写该表达式:if (ex!=left->lastMove[0] && can!=left->lastMove[1] && left->hasBoat)。它的意思完全一样(这就是为什么第二个版本没有解决问题:它没有改变任何东西),但是,一旦你习惯了这种语言,它就会更容易阅读。

标签: c++ if-statement multiple-conditions


【解决方案1】:
void change(Shore* left, Shore* right, int ex, int can) {
    if (((ex!=left->lastMove[0]) || (can!=left->lastMove[1])) && (left->hasBoat)) {

【讨论】:

  • 不要只发布代码而不做任何解释。解释问题以及您是如何解决的。
  • 谢谢!那行得通。很抱歉,我还在学习 SO。
猜你喜欢
  • 2015-01-20
  • 2013-12-17
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多