有限状态机在C语言编程中的各种应用
来源:互联网 发布:vb九九乘法表左下三角 编辑:程序博客网 时间:2024/05/16 12:39
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/86345822. 使用函数指针的有限状态机的应用
//使用函数指针实现的基于状态机(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
- 有限状态机在C语言编程中的各种应用
- 有限状态机在C语言编程中的各种应用
- 有限状态机在C语言编程中的各种应用
- 有限状态机在单片机和 Arduino 编程中的应用
- 用C语言实现有限状态机--读《C专家编程》
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- c语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- 有限状态机C语言实现
- C语言 有限状态机
- 删除C/C++中的注释-有限状态机(C语言实现)
- 游戏编程中的有限状态机
- 数据结构在C语言中的应用
- static在C语言中的应用
- 运用VC#编程通过OPC方式实现PC机与西门子PLC通讯-异步篇
- Ubuntu12.10 root用户登录设置
- android安全问题(二) 程序锁
- 推荐Web开发神器 Aptana 的一些亮点
- 升级redmine到2.3.0(此文章以sqlserver2008作为数据库为例,其他数据库只要在数据库连接配置中修改成自己的即可)
- 有限状态机在C语言编程中的各种应用
- MTK6577 编译报错
- Windows 7快捷键大放送
- UI -- UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem自定义方法总结
- 黑马程序员: 基础加强(反射、类加载器、动态代理技术、AOP、InvocationHandler)
- 修改开机画面:initlogo.rle
- metlab 字符串函数
- android安全问题(三) 钓鱼程序
- MFC树形控件(CTreeCtrl)用法(下)