用c语言实现状态机代码
时间: 2023-10-26 09:06:12 浏览: 44
以下是一个使用C语言实现的简单状态机代码示例:
```c
#include <stdio.h>
// 状态枚举
typedef enum {
STATE_A,
STATE_B,
STATE_C
} State;
// 事件枚举
typedef enum {
EVENT_1,
EVENT_2,
EVENT_3
} Event;
// 状态机结构体
typedef struct {
State current_state;
} StateMachine;
// 状态处理函数
State handle_event(StateMachine *machine, Event event) {
switch (machine->current_state) {
case STATE_A:
if (event == EVENT_1) {
printf("State A handles event 1\n");
return STATE_B;
} else if (event == EVENT_2) {
printf("State A handles event 2\n");
return STATE_C;
} else {
printf("State A ignores the event\n");
return STATE_A;
}
case STATE_B:
if (event == EVENT_2) {
printf("State B handles event 2\n");
return STATE_A;
} else {
printf("State B ignores the event\n");
return STATE_B;
}
case STATE_C:
if (event == EVENT_1) {
printf("State C handles event 1\n");
return STATE_B;
} else {
printf("State C ignores the event\n");
return STATE_C;
}
default:
printf("Invalid state\n");
return STATE_A;
}
}
int main() {
StateMachine machine;
machine.current_state = STATE_A;
machine.current_state = handle_event(&machine, EVENT_1); // 输出:State A handles event 1
machine.current_state = handle_event(&machine, EVENT_2); // 输出:State A handles event 2
machine.current_state = handle_event(&machine, EVENT_3); // 输出:State A ignores the event
return 0;
}
```
这个示例中,我们使用枚举定义了状态和事件。`handle_event`函数根据当前状态和接收到的事件进行处理,并返回新的状态。`main`函数中创建了一个状态机实例,并通过调用`handle_event`函数触发事件,并更新当前状态。在每个状态处理函数中,你可以根据需要执行相应的逻辑操作。