写一段C语言状态机程序
时间: 2023-10-06 07:08:24 浏览: 45
以下是一个简单的C语言状态机程序示例:
```
#include <stdio.h>
// 定义状态枚举
enum State {
STATE_INITIAL,
STATE_A,
STATE_B,
STATE_C,
STATE_ERROR
};
// 定义状态机结构体
struct StateMachine {
enum State currentState;
};
// 处理状态A的函数
void handleStateA(struct StateMachine* machine) {
printf("State A\n");
machine->currentState = STATE_B;
}
// 处理状态B的函数
void handleStateB(struct StateMachine* machine) {
printf("State B\n");
machine->currentState = STATE_C;
}
// 处理状态C的函数
void handleStateC(struct StateMachine* machine) {
printf("State C\n");
machine->currentState = STATE_INITIAL;
}
// 处理错误状态的函数
void handleStateError(struct StateMachine* machine) {
printf("Error State\n");
machine->currentState = STATE_ERROR;
}
// 处理输入的函数
void handleInput(char input, struct StateMachine* machine) {
switch (machine->currentState) {
case STATE_INITIAL:
if (input == 'a') {
handleStateA(machine);
} else {
handleStateError(machine);
}
break;
case STATE_A:
if (input == 'b') {
handleStateB(machine);
} else {
handleStateError(machine);
}
break;
case STATE_B:
if (input == 'c') {
handleStateC(machine);
} else {
handleStateError(machine);
}
break;
case STATE_C:
if (input == 'a') {
handleStateA(machine);
} else {
handleStateError(machine);
}
break;
default:
handleStateError(machine);
break;
}
}
int main() {
struct StateMachine machine = { STATE_INITIAL };
char input;
// 循环获取输入并处理
while (machine.currentState != STATE_ERROR) {
printf("Input: ");
scanf(" %c", &input);
handleInput(input, &machine);
}
return 0;
}
```
该程序实现了一个简单的状态机,根据输入的字符不同,会在不同的状态之间进行转换,并输出当前的状态。在默认情况下,如果输入的字符无法处理,则会进入错误状态。此外,该程序也包含了一个状态机结构体,可以用来保存当前的状态。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)