有限状态机在C语言编程中的各种应用
来源:互联网 发布:蓝格眼镜软件 编辑:程序博客网 时间:2024/06/05 12:07
1. 使用case的有限状态机
- //使用switch/case或者if/else实现的基于状态机(FSM)的密码锁
- //只有正确输入密码 2479 才能解锁
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef enum{
- STATE0 = 0,
- STATE1,
- STATE2,
- STATE3,
- STATE4,
- }STATE;
- int main()
- {
- char ch;
- STATE current_state = STATE0;
- while(1){
- printf("In put password:");
- while((ch = getchar()) != '\n')
- {
- if((ch < '0') || (ch > '9'))
- {
- printf("Input num,ok?/n");
- break;
- }
- switch(current_state){
- case STATE0:
- if(ch == '2') current_state = STATE1;
- break;
- case STATE1:
- if(ch == '4') current_state = STATE2;
- break;
- case STATE2:
- if(ch == '7') current_state = STATE3;
- break;
- case STATE3:
- if(ch == '9') current_state = STATE4;
- break;
- default:
- current_state = STATE0;
- break;
- }
- } //end inner while
- if(current_state == STATE4){
- printf("Correct, lock is open!\n");
- current_state = STATE0;
- }else
- {
- printf("Wrong, locked!\n");
- current_state = STATE0;
- }
- break;
- }
- return 0;
- }
- //代码摘自http://blog.csdn.net/qp120291570/article/details/8634582
- //使用函数指针实现的基于状态机(FSM)的密码锁
- //只有正确输入密码 2479 才能解锁
- #include <stdio.h>
- //这个秘密锁的密码是xxxx2479,就是说最后4位是2479,前面若干为为0~9里的数字,也可没有
- #include <stdlib.h>
- #include <string.h>
- //定义锁事件处理函数的函数指针类型
- typedef void (*lock_func_temp)(char c);
- typedef lock_func_temp (*lock_func)(char c);
- lock_func state;
- //函数声明队列
- //列出来,交叉引用才不会报错
- lock_func init_state(char ch);
- lock_func state1(char ch);
- lock_func state2(char ch);
- lock_func state3(char ch);
- lock_func state4(char ch);
- //初始状态
- lock_func init_state(char ch)
- {
- if ((ch < '0') || (ch > '9'))
- return NULL;
- else
- return state1(ch); //这里还必须得有参数,不然就会漏处理一个字符
- }
- //状态1
- lock_func state1(char ch)
- {
- if (ch == '2')
- {
- return state2;
- } else
- {
- return init_state;
- }
- }
- //状态2
- lock_func state2(char ch)
- {
- if (ch == '4')
- {
- return state3;
- } else
- {
- return init_state;
- }
- }
- //状态3
- lock_func state3(char ch)
- {
- if (ch == '7')
- {
- return state4;
- } else
- {
- return init_state;
- }
- }
- //状态4
- lock_func state4(char ch)
- {
- if (ch == '9')
- {
- printf("Correct, lock is open!\n");
- return NULL;
- } else
- {
- return init_state;
- }
- }
- //结束状态是NULL
- //就是通过 return NULL;表达的结束状态.
- //状态转换在这里
- void lock_handle (void)
- {
- char ch;
- state = init_state;
- while (state)
- {
- ch = getchar();
- state = (*state)(ch);
- }
- }
- int main()
- {
- lock_handle();
- }
3.基于状态矩阵的FSM应用
参考:http://www.cookiebear.info/archives/557
0 0
- 有限状态机在C语言编程中的各种应用
- 有限状态机在C语言编程中的各种应用
- 有限状态机在C语言编程中的各种应用
- 有限状态机在单片机和 Arduino 编程中的应用
- 用C语言实现有限状态机--读《C专家编程》
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- c语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- 有限状态机C语言实现
- C语言 有限状态机
- 删除C/C++中的注释-有限状态机(C语言实现)
- 游戏编程中的有限状态机
- 数据结构在C语言中的应用
- static在C语言中的应用
- linux常用命令----查看日志和系统资源占用
- SoundTouch音频处理库源码分析及算法提取(7)
- 程序员能力矩阵 — 敢测吗?看自己在哪个档次
- 小胖说事6------iOS setNeedsDisplay和setNeedsLayout的用法
- 如何理解单例模型
- 有限状态机在C语言编程中的各种应用
- suse gfotran 安装备忘
- rsa初识【php实现简易加解密】
- android通过AlarmManager固定时间与周期性的发送广播
- ZOJ 3871 Convex Hull
- Unity3D Plug-in for Android -- Activity
- python一些包的说明文档/教程链接
- error C2665: “cv::merge”: 3 个重载中没有一个可以转换所有参数类型
- 浅谈 SpringMVC 数据绑定