Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何摆脱这种边做边做的循环?_C++_Arduino_Do While - Fatal编程技术网

C++ 如何摆脱这种边做边做的循环?

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

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

在这段代码中,我从两个等于零的整数变量开始,一旦它们进入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);

  }
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;
  }