if和else if while循环中的conditons

时间:2017-12-01 18:11:18

标签: c

我有以下代码,一次运行3个步进器,步数n1n2n3不同。如果按如下方式使用,它不会运行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--;
}

1 个答案:

答案 0 :(得分:3)

if块将按原样运行一次。循环的第一次迭代,n1n2n3显然会分别具有初始值 - 00100 。第二次迭代,n1n2n3将分别具有值-1-199,因为您正在减少每个值它们在if块之后。显然,第二次迭代n3 > 0 && n1 == 0 && n2 == 0不是真的。

我们对你的直接问题的看法,经过你的评论证实,你不希望步数(n1n2n3)为负数。使用n1作为示例,当不大于或等于1时,不会减少步数 - 例如将 n1--; 更改为 if (n1 > 0) n1--;