您的位置:首页 > 财经 > 产业 > 【无标题】

【无标题】

2024/10/5 18:30:32 来源:https://blog.csdn.net/m0_66746512/article/details/139872259  浏览:    关键词:【无标题】

状态机的实现无非就是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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com