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.//假如密码是123456STATE 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;
}
C语言用状态机来实现简单的密码开锁相关推荐
- C语言程序设计 密码开锁 指针的介绍
例8-1 :利用指针模拟密码开锁游戏. 课本给出的代码 //获取密码的两种方法 #include<stdio.h> int main() {int x=5342;//变量x用于存放密码值5 ...
- 密码开锁:浙大版C语言程序设计
作为指针基础的第一道例题,题干用了大段文字去阐释题目意思,让刚刚拿到题目的我十分的苦恼,因为题干真的好绕.但是代码思路却是十分清晰的,int 一个x 一个空指针p ,让p 指向x ,然后打印输出观察此 ...
- 密码学(第二讲)---凯撒密码破译和简单替换密码
上节课,我们已经初步学习了凯撒密码和一些密码学的概念.今天,我们来学习破译和简单替换密码. 一.凯撒密码 凯撒密码是将字母往后平移3个,(列如apple加密的方式为: a–>a+3–>d ...
- 设计模式的C语言应用-状态机模式-第二章
模式介绍 状态(state)模式是C语言实现相当常用的模式,也是能够在C语言***现出来的最显性的模式之一.在面向对象里,状态模式允许一个对象在内部状态改变的时候改变其行为. 状态用法很多,最常见的是 ...
- C语言哈希表的简单实现——数组+链表(拉链法)
C语言哈希表的简单实现--数组+链表(拉链法) 1.哈希表简介 哈希表详细介绍可以参考这篇文章 2.哈希表拉链法实现 2.1完全由本人思路实现,如有错误,欢迎批评指正 哈希声明文件hash.h /* ...
- c语言程序构建,c语言开发环境构建及简单的c程序设计.doc
c语言开发环境构建及简单的c程序设计 实验x C语言开发环境构建及简单的C程序设计 一.实验目的 1.熟悉字符模式下的C程序编译和调试环境,基本掌握麒麟Linux字符模式下的编译工具和调试工具的使用: ...
- c语言编程坦克图案,用C语言的图像函数画一个简单的坦克图样
用C语言的图像函数画一个简单的坦克图样 #include "graphics.h" #include "conio.h" void Tanke(int x,in ...
- R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用attributes函数查看线性回归模型的属性信息、获取模型拟合对应的残差值residuals
R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用attributes函数查看线性回归模型的属性信息.获取模型拟合对应的残差值residuals 目录
- R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、可视化散点图并添加简单线性回归直线、添加模型拟合值数据点、添加拟合值点和实际数据点之间的线段表示残差大小、col参数自定义设置
R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.可视化散点图并添加简单线性回归直线.添加模型拟合值数据点.添加拟合
最新文章
- OpenResty搭建高性能服务端
- 学习笔记(18):Python网络编程并发编程-守护进程
- 苹果汽车项目团队添猛将?外媒称Apple Watch负责人已调入
- CCF201709-1 打酱油(100分)
- win10新建管理员账户_电脑技巧|Win10家庭版如何开启超级管理员账户
- (十八)其他数据库对象,视图,序列
- Arcgis中修改属性字段名
- 深度学习关于分布式任务调度平台XXL-JOB框架详解
- 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
- 2019校招阿里数据研发/数据挖掘三面总结
- 有没有人用过迅捷PDF转换器?文件转换效果怎么样?
- 1328C Ternary XOR
- 选择美国虚拟主机时要考虑的事项
- X79主板win10启动卡住问题修复处理
- 眼动数据中瞳孔大小这个数据怎么用?
- 号称BI商业智能界的“四大天王”
- A Persona-Based Neural Conversation Model论文
- Requests爬虫实践:豆瓣读书Top250数据
- LeetCode 561 Array Partition I(数组划分)
- webpack react npm start报错解决 ERR_OSSL_EVP_UNSUPPORTED
热门文章
- 魔百盒CM102_晨星MSO9280芯片_安卓4.4.4_当贝桌面免拆卡刷及TTL固件包
- Elgamal加密算法原理及实现
- 单片机毕业设计 STM32智能无线防盗报警器 - 物联网 嵌入式
- 做盐雾试验适用的产品有哪些
- Firefox 火狐浏览器强制刷新(忽略缓存)的快捷键
- 明说PHPCMS(一)
- phpcms v9 之session配置
- Android实现音乐示波器、均衡器、重低音和音场功能
- 百度java热力图_百度地图 之 热力图
- 【GRNN回归】基于matlab遗传算法优化GRNN数据回归拟合【含Matlab源码 1401期】