我有这个基本的 Arduino 代码,我想要退出此 Do-While 循环的 2 个选项。
我简化了原始代码以突出真正的问题: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);
}
我的问题是我没有设置fin = 2, 因为我想测试 OR 条件是否有效.
但似乎它无法退出 Do-While,除非它们都等于 2。这对我来说很奇怪,因为 OR 条件允许使用双选项退出 Do-While,在这种特殊情况下,这些选项是:
结束或(替代选项)..fin<1
另外,如果我用 AND 更改 while 条件(代码的其余部分相同),它的行为就像我想要的那样:这样我就有两种方法退出 Do-While 循环。
像这样:
} while ((ending < 1) && (fin < 1));
但不是在 AND 条件下我必须匹配两个条件结束 >= 1并且(同时)鳍 >= 1退出循环?
为什么会发生这种情况?
我该如何解决这个问题?
请记住,如果你说while (condition)
,你会循环只要condition
评估为真。所以既然你的条件是
(ending < 1) || (fin < 1)
唯一让这个错误的方法是如果两者都ending < 1
是假的AND fin < 1
也是假的。
当你遇到这样的困惑时,一个简单的技巧就是使用德摩根定律 https://en.wikipedia.org/wiki/De_Morgan%27s_laws来找到反证词。换句话说,如果你想循环 while(ending < 1) || (fin < 1)
,这相当于当相反的情况成立时您想要停止循环。使用德摩根定律,我们可以看到:
!((ending < 1) || (fin < 1))
!(ending < 1) && !(fin < 1)
ending >= 1 && fin >= 1
所以我们只在以下情况下停止循环ending >= 1 && fin >= 1
!
如果您想在以下情况下停止循环,则以另一种方式工作:ending >= 1 || fin >= 1
,那么当相反的情况成立时我们将循环。再次运用德摩根定律......
!(ending >= 1 || fin >= 1)
!(ending >= 1) && !(fin >= 1)
ending < 1 && fin < 1
所以你一直想要一个 AND 而不是 OR!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)