用c语言打破循环

时间:2016-11-21 09:13:12

标签: c

for (int i = 0; i < 6; i++) {
    led_r1 = ~led_r1;
    led_r2 = ~led_r2;
    led_l1 = 0;
    led_l2 = 0;
    DelayMs(60);
    if (check == 1) {
       check = 0;
       right_check = 0;
       left_check = 0;
       goto new_pattern;
    }
    if (off == 2) {
       off = 1;
       right_check = 0;
       left_check = 0;
       goto reset;
    }
}

这是我的代码在我的项目中闪烁两个LED ... 它工作正常,但我的程序是正确的......? 这种使用goto语句的方式是否正确..? 它会使节目enter code here am .. enter code here

崩溃

是他们以任何其他方式终止程序并跳转到程序的另一部分

1 个答案:

答案 0 :(得分:0)

根据您提供的代码回答您的问题非常困难,因为您尚未对new_pattern:reset:标签上发生的情况做出任何解释,或者你期望变量的值如何在一个没有可能导致这种情况发生的指令的循环内发生变化。

然而,正如Lundin在评论中指出的那样,你应该尝试avoid the use of goto statements whenever possible。它们往往会导致代码无法读取且无法维护。

相反,您应该尝试遵循structured programming的原则。特别是,您应该考虑使用函数来更逻辑地组织代码。 (选择适当的描述性函数名称也会使您的代码更容易理解。)

您的代码的结构化重新处理可能如下所示:

#define NO_CHANGE      0
#define UPDATE_PATTERN 1
#define RESET_LEDS     2

int main() {
    /* ... */
    switch(flash_leds()) {
        case UPDATE_PATTERN:
            new_pattern();
            break;
        case RESET_LEDS:
            reset();
            break;
        default:
            /* Done flashing; no action required */
    }
    /* ... */
}

int flash_leds() {
    for (int i = 0; i < 6; i++) {
        /* ... */
        if (check == 1) return UPDATE_PATTERN;
        if (off == 2) return RESET_LEDS;
    }
    return NO_CHANGE;
}

void new_pattern() {
    /* update the pattern displayed by the LEDs */
}

void reset() {
    /* reset the LEDs */
}