c - C语言中的循环中断

标签 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 语句的方式正确吗? 它将折叠程序在此处输入代码am..?在此处输入代码

他们是否有其他方法来终止程序并跳转到程序的另一部分

最佳答案

根据您提供的代码很难回答您的问题,因为您没有对 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 */
}

关于c - C语言中的循环中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716423/

相关文章:

c - 如何修复段错误?

c - 如果 "i = i++"不被视为未定义行为会发生什么?

c - C 中的 0/0 - gcc-7 或更高版本

递归查找数组中最大元素的巧妙方法

c++ - 避开 CRT

C 程序未将值传递给方法

c++ - 操作系统中的互斥量

C 语言 - 在情况下,除了数字之外,我可以使用字符作为开关吗?

创建C头文件,出现错误

C - 在 while 循环的开头和结尾附加字符串