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 条件才能退出循环吗?
为什么会这样?我该如何解决这个问题?
请记住,如果您说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 !