用C语言写一个状态机
时间: 2023-07-13 18:08:38 浏览: 41
好的,以下是一个简单的状态机示例,它通过检测输入字符序列中的连续字符“abc”来进入“匹配”状态,并在检测到字符“d”时返回“初始”状态:
```c
#include <stdio.h>
enum state {
INIT,
MATCH
};
int main() {
enum state cur_state = INIT;
char input;
while (1) {
scanf("%c", &input);
switch (cur_state) {
case INIT:
if (input == 'a') {
cur_state = MATCH;
}
break;
case MATCH:
if (input == 'b') {
cur_state = MATCH;
} else if (input == 'c') {
printf("Match found!\n");
cur_state = INIT;
} else {
cur_state = INIT;
}
break;
}
if (input == 'd') {
cur_state = INIT;
}
}
return 0;
}
```
在这个状态机示例中,`enum state` 定义了两个状态,`INIT` 和 `MATCH`,分别表示初始状态和匹配状态。
在主函数中,我们首先将当前状态设置为 `INIT`。然后,我们使用一个无限循环来读取输入字符。在每次循环迭代中,我们使用 `switch` 语句来处理当前状态下的不同输入字符。如果输入字符是 `a`,我们将当前状态设置为 `MATCH`,表示我们已经开始了一个新的匹配序列。如果输入字符是 `b`,我们保持在当前状态 `MATCH` 中。如果输入字符是 `c`,我们打印出匹配成功的信息,并将当前状态设置回 `INIT`,表示我们已经找到了一个匹配序列。如果输入字符是任何其他字符,则将当前状态设置回 `INIT`。
最后,如果输入字符是 `d`,我们将当前状态设置回 `INIT`,以便我们可以开始一个新的匹配序列。
这是一个非常简单的状态机示例,但它可以帮助你了解如何使用 C 语言来实现状态机。