笔记整理—状态机

        状态机有如下类型、Moore类型和Mealy类型。Moore类型:输出只与当前状态有关。而Mealy类型:输出与输入+当前状态有关。

        那么状态机用来干嘛?①电路设计。②FPGA设计。③软件设计(如消息机制)。

        状态机解决了什么问题?改变程序的大体执行流程,方向可寻,但外部不一定接收按照既定流程给出的信息,但依然要求进行输出正确的信息,符合逻辑。eg:看到的信息不一定符合语序,但依然会被理解。

        状态机方式的密码锁:用户输入密码错误会进行重置,但不使用reset的方法。

typedef enum//六位数密码
{
    STATE 1,
    STATE 2.
    STATE 3,
    STATE 4,
    STATE 5,
    STATE 6,
    STATE 7,
}STATE;

int main()
{
    int num=0;
    STATE current_state=STATE1;
    while(1)
        {
           scanf("%d",&num);//用getchar更好
           printf("num=%d\n",num);
           switch(current_state)
           {
                case STATE1:
                    if(1==num)
                        {
                            current_state=STATE2;
                        }
                      break;
                case STATE2:
                    .
                    .
                    .
            default:
                current_satte=STATE1;//归零
            }if(STATEcurrent_state==STATE7)
                {
                    printf("开锁\n");
                    break;
                }
        }
}

        在当前状态机情况下,在STATE2的部分会卡bug,所以应该在密码位置所有的if后加一个else

else{
    current_state=STATE1;
}

         否则的话当输入为1,2,5,3,4,5,6锁会打开,当else加上后该错误的密码将不会打开锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值