gpt4 book ai didi

c - C语言中的循环中断

转载 作者:行者123 更新时间:2023-11-30 21:28:31 30 4
gpt4 key购买 nike

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com