

要求灯是要在红绿黄之间进行切换,为什么输出结果灯的状态一直是0?


关注引自免费微信小程序:皆我百晓生
在提供的C语言代码中,存在一些语法错误和逻辑问题,导致灯的状态一直显示为0。以下是修复后的代码,并解释了改动的原因。
首先,让我们修复代码中的错误并使其运行正常。注意,我将led_state函数中的变量名更改为易于理解的名称,并调整了缩进以提高可读性。
#include <stdio.h>
// 定义枚举类型
enum Colors {RED, GREEN, YELLOW};
// 更新LED状态的函数
int updateLedState(int currentColor, int *currentState) {
switch(currentColor) {
case RED:
*currentState = GREEN;
break;
case GREEN:
*currentState = YELLOW;
break;
case YELLOW:
*currentState = RED;
break;
}
return *currentState;
}
int main() {
// 初始化LED状态为红色
int ledState = RED;
for(int i = 0; i < 3; ++i) {
ledState = updateLedState(ledState, &ledState);
printf("LED state: %d\n", ledState);
}
return 0;
}
更改说明:
led_state函数中的局部变量led_c、p分别重命名为currentColor和currentState,以便更好地理解它们的作用。switch语句中添加break语句,防止程序在匹配到一个case后继续执行下一个case。while更改为for,因为在这种情况下,for循环更适合。main函数中的返回值类型为int,并将返回值设为0,这通常表示程序成功结束。现在,当您运行这段修改后的代码时,LED状态将在RED、GREEN和YELLOW之间正确地切换,每次循环打印出当前LED状态。例如,输出可能类似于:
LED state: 1
LED state: 2
LED state: 0
其中数字代表对应的枚举值:0 - RED,1 - GREEN,2 - YELLOW。