[英]if and else if conditons inside a while loop
我有以下代码,可一次运行3个步进器,并使用不同数量的步骤n1
, n2
和n3
。 如果按以下方式使用,它不会运行n3
电机,但是如果我们去除if
条件,它将运行。
int n1 = 0;
int n2 = 0;
int n3 = 100
while (n1 > 0 || n2 > 0 || n3 > 0) {
if (n3 > 0 && n1 == 0 && n2 == 0) {
current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
new_port_value = (current_port_value & ~0X02);
XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
new_port_value = (current_port_value | 0X04);
XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
new_port_value = (current_port_value | 0X08);
XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
new_port_value = (current_port_value | 0X40);
XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
new_port_value = (current_port_value | 0X80);
XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
for (Delay = 0; Delay < LED_DELAY; Delay++);
current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
new_port_value = (current_port_value & ~0X80);
XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
for (Delay = 0; Delay < LED_DELAY; Delay++);
}
n1--;
n2--;
n3--;
}
if
块将按原样运行一次。 循环的第一次迭代n1
, n2
和n3
显然将对它们的初始值- 0
, 0
,和100
分别。 第二个迭代n1
, n2
和n3
将分别具有值-1
, -1
和99
因为您要在if
块之后递减每个值。 显然,然后在第二次迭代中n3 > 0 && n1 == 0 && n2 == 0
是不正确的。
根据您的评论,我对您眼前的问题的看法是,您不希望步骤数( n1
, n2
或n3
)为负数。 以n1
为例, 当步数不大于1时 , 不要简单地减少步数–例如,更改 n1--;
到 if (n1 > 0) n1--;
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.