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/