xi17_17 2024-05-22 15:56 采纳率: 0%
浏览 2

关于#c语言#的问题:要求灯是要在红绿黄之间进行切换,为什么输出结果灯的状态一直是0(相关搜索:c语言函数指针)

img

img


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

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-22 15:56
    关注

    引自免费微信小程序:皆我百晓生

    在提供的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;
    }
    

    更改说明:

    1. led_state函数中的局部变量led_cp分别重命名为currentColorcurrentState,以便更好地理解它们的作用。
    2. switch语句中添加break语句,防止程序在匹配到一个case后继续执行下一个case。
    3. 将循环结构从while更改为for,因为在这种情况下,for循环更适合。
    4. 更改main函数中的返回值类型为int,并将返回值设为0,这通常表示程序成功结束。

    现在,当您运行这段修改后的代码时,LED状态将在REDGREENYELLOW之间正确地切换,每次循环打印出当前LED状态。例如,输出可能类似于:

    LED state: 1
    LED state: 2
    LED state: 0
    

    其中数字代表对应的枚举值:0 - RED,1 - GREEN,2 - YELLOW。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月22日