C语言学习笔记_状态机
C语言学习笔记_状态机
概念
- 全程为有限状态机FSM;
- 能够从外部接收信号和信息输入,机器在接收到外部输入的信号后会综合考虑当前状态和用户输入的信息,然后机器做出动作,跳转到另一个状态;
Moore和Mealy型
- Moore型状态机特点是:输出只与当前状态有关(与输入信号无关)。相对简单,考虑状态机的下一个状态时只需要考虑它的当前状态就行了;
- Mealy型状态机的特点是:输出不只和当前状态有关,还与输入信号有关。状态机接收到一个输入信号需要跳转到下一个状态时,状态机综合考虑2个条件(当前在黄台、输入值)后才决定跳转到哪个状态;
用途
电路设计、FPGA程序设计、软件设计(不是很多);
例子
#include <stdio.h>
typedef enum{
STATE1,
STATE2,
STATE3,
STATEND,
}STATE;
int main(void) {
int num = 0;
// current_state为当前状态,初始状态为STATE1
// 直到STATEND后开锁
STATE current_state = STATE1;
printf("Input password.\n");
while (1) {
scanf("%d", &num);
printf("&d\n", num);
switch(current_state) {
case STATE1:
if (num == 1) {
// 输入正确,状态机前进
current_state = STATE2;
}else {
current_state = STATE1;
}
break;
case STATE2:
if (num == 2) {
// 输入正确,状态机前进
current_state = STATE3;
}else {
current_state = STATE1;
}
break;
case STATE3:
if (num == 3) {
// 输入正确,状态机前进
current_state = STATEND;
}else {
current_state = STATE1;
}
break;
defaulat:
current_state = STATE1;
}
if (current_state == STATEND) {
printf("unlock!\n");
break;
}
}
}