【无标题】

状态机的实现无非就是3个要素:状态,事件,响应。转换成具体的行为就3句话

发生了什么事?

现在系统处在什么状态?

在这样的状态下发生了这样的事,系统要干什么?

举例--工作管理系统

复制代码
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
  
// 定义状态枚举  
typedef enum {  
    STATE_IDLE,  
    STATE_WORKING,  
    STATE_DONE,  
    STATE_ERROR  
} ToolState;  
  
// 定义状态机结构体  
typedef struct {  
    ToolState currentState;  
} ToolStateMachine;  
  
// 状态转换函数  
void transitionToIdle(ToolStateMachine *sm)
{
    sm->currentState = STATE_IDLE;  
    printf("Tool is idle.\n");  
}
  
void transitionToWorking(ToolStateMachine *sm) {  
    sm->currentState = STATE_WORKING;  
    printf("Tool is working.\n");  
    // 在这里执行实际的工作  
}  
  
void transitionToDone(ToolStateMachine *sm) {  
    sm->currentState = STATE_DONE;  
    printf("Tool is done.\n");  
}  
  
void transitionToError(ToolStateMachine *sm) {  
    sm->currentState = STATE_ERROR;  
    printf("Tool encountered an error.\n");  
}  

// 处理用户输入的函数  
void processInput(ToolStateMachine *sm, const char *input) 
{
   if(strcmp(input, "start")==0)
   {
        if(sm->currentState == STATE_IDLE)
        {
            transitionToWorking(sm);
        }
        else
        {
            printf("Cannot start while not in idle state.\n");
        }
   }
   else if(strcmp(input,"stop")==0)
   {
        if(sm->currentState == STATE_WORKING)
        {
            transitionToDone(sm);
        }
        else
        {
            printf("Cannot stop while not working.\n");
        }
   }
   else if(strcmp(input,"invalid")==0)
   {
        transitionToError(sm);
   }
   else
   {
     printf("Unknown command.\n"); 
   }
}


int main(void)
{
    ToolStateMachine sm = {STATE_IDLE};

    //模拟用户输入
    processInput(&sm,"start");
    processInput(&sm,"invalid");
    processInput(&sm,"stop");
    return 0;
}
相关推荐
another heaven10 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
another heaven1 天前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude1 天前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
Zwawa1 天前
让屏幕动起来:OLED动画效果,丝滑光标、帧动画和一只贪吃蛇
c语言·单片机·嵌入式
꧁细听勿语情꧂1 天前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
§ꦿCFོ༉2 天前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
Severus_black2 天前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
唐青枫2 天前
C 语言 strcpy() 用法详解与实战 Demo
c语言
程序猿打工仔2 天前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
꧁细听勿语情꧂2 天前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法