如何摆脱这个 Do-While 循环?

Car*_*rlo 3 c++ arduino do-while

我有这个基本的 Arduino 代码,我想要 2 个选项来退出这个 Do-While 循环。我简化了我的原始代码以突出真正的问题:Do-While无法识别 OR || 退出循环的条件

在这段代码中,我从两个等于 0 的整数变量开始,一旦它们进入 Do-While,它们就会被设置为等于 2,这样它们就可以在第一个中立即退出 Do-While迭代。

这是我的代码:

int fin = 0;
int ending = 0;
int counter = 0;


void setup() {

  Serial.begin(9600);

}; //void setup



void loop ()  {

  do  {

      Serial.println("We are IN Do-While #1");
      ending = 2;
      //fin = 2;

  } while ((ending < 1) || (fin < 1)); //I have just one condition for exit the Do-While ending = 1


Serial.println("We are OUT Do-While #1");
delay(3000);


  do {

    counter++;
  } while(counter<=100);

  Serial.println("We are OUT Do-While #2");
delay(3000);

  }
Run Code Online (Sandbox Code Playgroud)

我的问题是我没有设置fin = 2因为我想测试 OR 条件是否有效

但似乎它不能退出 Do-While,除非它们都等于 2。这对我来说很奇怪,因为 OR 条件允许使用双重选项退出 Do-While,在这种特殊情况下,这些选项是:

结束 <1或(替代选项).. fin<1

此外,如果我更改(其余代码相同)带有 AND 的 while 条件,它的行为就像我想要的:这样我就有两种方法可以退出 Do-While 循环。像这样:

} while ((ending < 1) && (fin < 1));
Run Code Online (Sandbox Code Playgroud)

但不是在 AND 条件下我必须匹配结束 >= 1 AND(同时)fin >= 1 的BOTH 条件才能退出循环吗?

为什么会这样?我该如何解决这个问题?

sco*_*001 6

请记住,如果您说while (condition)只要condition计算结果为真,您就会循环所以既然你的条件是

(ending < 1) || (fin < 1)
Run Code Online (Sandbox Code Playgroud)

如果两者ending < 1都是假的 fin < 1并且也是假的,那么这就是假的唯一方法。

当您像这样混淆时,一个简单的技巧是使用德摩根定律来找到对立面。换句话说,如果你想循环 while (ending < 1) || (fin < 1),这与说你想在相反的情况下停止循环是一样的。使用德摩根定律,我们可以看到这是:

!((ending < 1) || (fin < 1))
!(ending < 1) && !(fin < 1)
ending >= 1 && fin >= 1
Run Code Online (Sandbox Code Playgroud)

所以我们只在ending >= 1 && fin >= 1!

以另一种方式工作,如果您想在 when 停止循环ending >= 1 || fin >= 1,那么我们将在相反的情况下循环。再次使用德摩根定律...

!(ending >= 1 || fin >= 1)
!(ending >= 1) && !(fin >= 1)
ending < 1 && fin < 1
Run Code Online (Sandbox Code Playgroud)

所以你一直想要一个 AND 而不是 OR !