有限状态机在C语言编程中的各种应用
2013-03-27 14:55
218 查看
1. 使用case的有限状态机
3.基于状态矩阵的FSM应用
参考:http://www.cookiebear.info/archives/557
//使用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语言socket编程开发应用示例
- C语言编程(图形库应用)--导航
- Linux下的C语言编程——waitpid函数的应用
- android中各种传感器的应用与编程实例
- 第四章:iOS应用漏洞利用 ——4.21 C语言安全编程
- C语言编程指针的应用场合
- C语言的窗口式图形界面设计——自带汉字环境的应用软件编程http://bbs.51cto.com/thread-63947-1-1.html
- C语言循环结构的应用---各种菱形
- 有限状态机在单片机和 Arduino 编程中的应用
- 各种编程风格
- 【linux高级程序设计】(第十五章)UDP网络编程应用 4
- 使用纯C语言开发简单的Direct3D 12应用
- (编程基础)c语言格式码和修饰符
- C语言小编程之判断一个数是否是2的n次方的巧妙方法
- vs2013 窗体应用编程—控件大小随窗体变化(通过代码实现)
- word编程补充-关于word打印的实际应用
- 用C语言编程16点阵字库
- C语言之基本算法30—数组的灵活应用(一个正整数的各位数字平方和)