C语言状态机算法,如何使用c语言实现状态机算法.pdf

如何使用c语言实现状态机算法

如何使用c语言实现状态机算法

1.C语言实现简单的状态机

1.1、题目:开锁状态机。

功能描述:用户连续输入正确的密码则会开锁,如果密码输入过程错误则锁会退

回到初始状态重新计入密码,即:用户只需要连续输入出正确的密码即可开锁(输

入错误不用撤销、也不用删除)。

1.2、题目分析

我们平时写程序都是顺序执行的,这种程序有个特点:程序的大体执行流程

是既定的,程序的执行是遵照一定的大的方向有迹可寻的。但是偶尔会碰到这样

的程序:外部不一定会按照既定流程来给程序输入信息,而程序还需要完全能够

接收并响应外部的这些输入信号,还要能做出符合逻辑的输出。

用状态机来实现密码锁相当于密码序列一旦输错,需要全部删除后重新输

入。即用户输错引起状态机将锁置为初始状态,用户下一次输入作为下一组密码

的起始部分。

假设密码序列为:N1N2N3N4N5N6,给出流程图:

分析流程图

#include

// 给状态机定义状态集

typedef enum

{

STATE0,

STATE1,

STATE2,

STATE3,

STATE4,

STATE5,

STATE6,

}STATE;

//利用枚举类型来表达状态机的所有可能状态。具体到本题目,即开锁已经

到哪一步或者该执行哪一步。

Int main(void)

{

int num 0;

// current_state记录状态机的当前状态,初始为STATE1,

//用户每输入一个正确的

// 密码STATE就走一步,直到STATE为STATE6后锁就开了;

//其中只要有一次用户

// 输入对不上就回到STATE1.

STATE current_state STATE0;// 状态机初始状态为STATE1

// 第一步:实现一个用户循环输入密码的循环

printf("请输入密码,密码正确开锁.\n");

while (1)

{

scanf("%d", &num);

printf("num %d.\n", num);// 提示信息,在这里处理用

//户的本次输入

switch (current_state)

{

case STATE0:

if (num 1)

{

current_state STATE1; // 用户输入对了一步,

//STATE走一步

}

else

{

current_state STATE0;

}

break;

case STATE1:

if (num 2)

{

current_state STATE2; // 用户输入对了一步,

//STATE走一步

}

else

{

current_state STATE0;

}

break;

case STATE2:

if (num 3)

{

current_state STATE3; // 用户输入对了一步,

//STATE走一步

}

else

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值