C语言用状态机来实现简单的密码开锁

功能描述:用户连续输入正确的密码则会开锁,如果密码输入过程错误则锁会退回到初始状态,重新键入密码,即:用户只需要连续输入正确的密码即可开锁(输入错误不用撤销、也不用删除)

以上的分析和下面的代码来自《朱有鹏老师物联网大讲堂》的C语言高级篇,本人觉得采用状态机编程的这种思路比较新,值得回味,特保存以待后续参考学习。

#include <stdio.h>

// 给状态机定义状态集
typedef enum 
{
	STATE1,
	STATE2,
	STATE3,
	STATE4,
	STATE5,
	STATE6,
	STATE7,
}STATE;

int main(void)
{
    int num = 0;
    // current_state记录状态机的当前状态,初始为STATE1,用户每输入一个正确的
    // 密码STATE就走一步,一直到STATE为STATE7后锁就开了;其中只要有一次用户
    // 输入对不上就回到STATE1.
    //假如密码是123456
    STATE current_state = STATE1;		// 状态机初始状态为STATE1
	
    // 第一步:实现一个用户循环输入密码的循环
    printf("请输入密码:\n");
    while (1)
    {
	scanf("%d", &num);
	printf("num = %d.\n", num);
		
	// 在这里处理用户的本次输入
	switch (current_state)
	{
	    case STATE1:
		if (num == 1)
		{
		    current_state = STATE2;	// 用户输入对了一步,STATE走一步
		}
		else
		{
		    current_state = STATE1;
		}
		    break;
	    case STATE2:
		if (num == 2)
		{
		    current_state = STATE3;	// 用户输入对了一步,STATE走一步
		}
		else
		{
		    current_state = STATE1;
		}
		    break;
	    case STATE3:
		if (num == 3)
		{
		    current_state = STATE4;	// 用户输入对了一步,STATE走一步
		}
		else
		{
		    current_state = STATE1;
		}
		    break;
	    case STATE4:
		if (num == 4)
		{
		    current_state = STATE5;		// 用户输入对了一步,STATE走一步
		 }
		else
		{
		    current_state = STATE1;
		}
		    break;
	    case STATE5:
		if (num == 5)
		{
		    current_state = STATE6;		// 用户输入对了一步,STATE走一步
		}
		else
		{
		    current_state = STATE1;
		}
		    break;
	    case STATE6:
		if (num == 6)
		{
		    current_state = STATE7;	// 用户输入对了一步,STATE走一步
		}
		else
		{
		    current_state = STATE1;
		}
		    break;
	    default:
		    current_state = STATE1;
	    }//switch语句
		if (current_state == STATE7)
		{
			printf("锁开了.\n");
			break;//跳出while循环
		}
    }//while(1)
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值