理解状态机(通俗易懂)

状态机简单概念:
满足一个状态时将会跳转到下一个状态,当所有状态都满足(或执行完所有的状态时),将会完成所要的结果。
eg:密码锁的密码设为13579,则状态机总共有6中状态。可以定义为state1~state6。
当输入1,跳转到state1(当前状态就设为了state2)
当输入3,跳转到state2(当前状态就设为了state3)
.
.
.
当输入9,跳转到state5(当前状态就设为了state6)
当状态机处于状态6时,密码锁即可打开。
C语言代码实现:

#include <stdio.h>
 
typedef enum		// 利用枚举定义状态机的状态集
{
	STATE1,
	STATE2,
	STATE3,
	STATE4,
	STATE5,
	STATE6,
}STATE;
 
int main(void)
{
	int num = 0;
	STATE state = STATE1;
	
	printf("请输入密码\n");
	while(1)
	{
		scanf("%d", &num);
		printf("The number you entered is:%d\n", num);
		switch(state)
		{
			case STATE1:
				if(num == 1)
				{
					state = STATE2;
				}
				break;
			case STATE2:
				if(num == 3)
				{
					state = STATE3;
				}
			
				break;
			case STATE3:
				if(num == 5)
				{
					state = STATE4;
				}
			
				break;
			case STATE4:
				if(num == 7)
				{
					state = STATE5;
				}
			
				break;
			case STATE5:
				if(num == 9)
				{
					state = STATE6;
				}
			
				break;
		
			default:
				state = STATE1;
		}
		if(state == STATE6)
		{
			printf("密码正确\n");
			break;
		}
	}
	return 0;
}

注:程序可能存在bug,不过只要理解何为状态机即可。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值