C++ 如何摆脱这种边做边做的循环?
我有这个基本的Arduino代码,我想有两个选项退出这个Do While循环。 我简化了我的原始代码以突出显示真正的问题:Do While无法识别退出循环的OR | |条件 在这段代码中,我从两个等于零的整数变量开始,一旦它们进入Do While,它们将被设置为2,这样它们就可以在第一次迭代中立即退出Do While 这是我的密码:C++ 如何摆脱这种边做边做的循环?,c++,arduino,do-while,C++,Arduino,Do While,我有这个基本的Arduino代码,我想有两个选项退出这个Do While循环。 我简化了我的原始代码以突出显示真正的问题:Do While无法识别退出循环的OR | |条件 在这段代码中,我从两个等于零的整数变量开始,一旦它们进入Do While,它们将被设置为2,这样它们就可以在第一次迭代中立即退出Do While 这是我的密码: int fin = 0; int ending = 0; int counter = 0; void setup() { Serial.begin(960
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);
}
int-fin=0;
int结束=0;
int计数器=0;
无效设置(){
Serial.begin(9600);
}; //无效设置
空循环(){
做{
Serial.println(“我们在Do While#1”);
结束=2;
//fin=2;
}while((end<1)| |(fin<1));//我只有一个条件可以在end=1时退出Do
Serial.println(“我们出去玩了一段时间”);
延迟(3000);
做{
计数器++;
}而(计数器=1和(同时)fin>=1退出循环
为什么会这样?
我怎样才能解决这个问题
但除非它们都等于2,否则它似乎无法退出Do。这对我来说很奇怪,因为OR条件允许使用双选项退出Do,在这种特殊情况下,这些选项是:
事实上,恰恰相反
循环有两个选项可以继续
我相信你的意思是&&
,而不是|
但在AND条件中,我必须同时匹配结束>=1和(同时)fin>=1这两个条件,不是吗
是的,继续
这意味着,您只需不匹配其中一个条件即可停止。在当前状态下,只要(至少)其中一个条件为真(不必两者都为真!),循环将继续
只要ending小于2或fin小于2,则循环将继续。
在您的代码中,fin小于2,因此循环继续…请记住,如果您在(条件)
时说,只要条件
的计算结果为true,您将循环。因为您的条件为true
(ending < 1) || (fin < 1)
因此,您需要的是AND而不是OR!因此,我们讨论的是代码中的第一个循环
do {
Serial.println("We are IN Do-While #1");
ending = 2;
//fin = 2;
} 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
do {
Serial.println("We are IN Do-While #1");
ending = 2;
//fin = 2;
} while ((ending < 1) || (fin < 1));
do {
Serial.println("We are IN Do-While #1");
ending = 2;
//fin = 2;
if ( ending >= 1 ) break;
}