如何用C语言switch case构建状态机

   2024-10-10 6490
核心提示:在C语言中可以使用switch case语句来构建状态机。下面是一个简单的示例:#include stdio.htypedef enum {STATE_IDLE,STATE_RUNNI

在C语言中可以使用switch case语句来构建状态机。下面是一个简单的示例:

#include <stdio.h>typedef enum {    STATE_IDLE,    STATE_RUNNING,    STATE_PAUSED,    STATE_STOPPED} State;int main() {    State currentState = STATE_IDLE;    char input;    while(1) {        switch(currentState) {            case STATE_IDLE:                printf("Currently in idle state. Press 'r' to start running.\n");                break;                        case STATE_RUNNING:                printf("Currently running. Press 'p' to pause, 's' to stop.\n");                break;                        case STATE_PAUSED:                printf("Currently paused. Press 'r' to resume, 's' to stop.\n");                break;                        case STATE_STOPPED:                printf("Currently stopped. Press 'r' to start running again.\n");                break;        }        input = getchar();        switch(currentState) {            case STATE_IDLE:                if(input == 'r') {                    currentState = STATE_RUNNING;                }                break;                        case STATE_RUNNING:                if(input == 'p') {                    currentState = STATE_PAUSED;                } else if(input == 's') {                    currentState = STATE_STOPPED;                }                break;                        case STATE_PAUSED:                if(input == 'r') {                    currentState = STATE_RUNNING;                } else if(input == 's') {                    currentState = STATE_STOPPED;                }                break;                        case STATE_STOPPED:                if(input == 'r') {                    currentState = STATE_RUNNING;                }                break;        }    }    return 0;}

在这个示例中,我们定义了一个枚举类型State来表示状态机的不同状态。在主函数中,我们使用一个while循环来不断检查当前状态并根据输入改变状态。通过使用switch case语句,我们可以根据当前状态打印不同的提示信息,并根据输入来改变状态。这样就构建了一个简单的状态机。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号