C 语言写一个状态机
时间: 2023-07-13 22:11:15 浏览: 48
状态机是一种常用的程序设计方式,可以用于对复杂的业务逻辑进行建模和实现。下面是一个简单的C语言示例,演示如何实现一个简单的状态机:
```c
#include <stdio.h>
// 定义状态机的状态
typedef enum {
STATE_IDLE,
STATE_START,
STATE_RUN,
STATE_STOP
} state_t;
// 定义状态机的事件
typedef enum {
EVENT_NONE,
EVENT_START,
EVENT_STOP
} event_t;
// 定义状态机的转移表
state_t state_machine[][3] = {
{STATE_IDLE, STATE_START, STATE_IDLE},
{STATE_RUN, STATE_START, STATE_STOP},
{STATE_RUN, STATE_RUN, STATE_STOP},
{STATE_IDLE, STATE_START, STATE_IDLE}
};
// 定义状态机的初始状态
state_t current_state = STATE_IDLE;
// 定义状态机的处理函数
void state_handler(event_t event) {
state_t next_state = state_machine[current_state][event];
printf("Current state: %d, Event: %d, Next state: %d\n", current_state, event, next_state);
current_state = next_state;
}
int main() {
// 模拟状态机的事件
state_handler(EVENT_START);
state_handler(EVENT_START);
state_handler(EVENT_STOP);
state_handler(EVENT_STOP);
state_handler(EVENT_START);
return 0;
}
```
该程序实现了一个简单的状态机,可以根据输入的事件,自动转移到相应的状态。程序中定义了状态机的状态和事件,以及状态机的转移表和处理函数。在处理函数中,根据当前状态和输入事件,通过转移表计算下一个状态,并将其输出到控制台。
需要注意的是,状态机的实现和应用需要根据具体的业务需求进行设计和优化。同时,需要注意状态机的可读性和可维护性,以确保代码的质量和效率。