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

以上的分析和下面的代码来自《朱有鹏老师物联网大讲堂》的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语言用状态机来实现简单的密码开锁相关推荐

  1. C语言程序设计 密码开锁 指针的介绍

    例8-1 :利用指针模拟密码开锁游戏. 课本给出的代码 //获取密码的两种方法 #include<stdio.h> int main() {int x=5342;//变量x用于存放密码值5 ...

  2. 密码开锁:浙大版C语言程序设计

    作为指针基础的第一道例题,题干用了大段文字去阐释题目意思,让刚刚拿到题目的我十分的苦恼,因为题干真的好绕.但是代码思路却是十分清晰的,int 一个x 一个空指针p ,让p 指向x ,然后打印输出观察此 ...

  3. 密码学(第二讲)---凯撒密码破译和简单替换密码

    上节课,我们已经初步学习了凯撒密码和一些密码学的概念.今天,我们来学习破译和简单替换密码. 一.凯撒密码 凯撒密码是将字母往后平移3个,(列如apple加密的方式为: a–>a+3–>d ...

  4. 设计模式的C语言应用-状态机模式-第二章

    模式介绍 状态(state)模式是C语言实现相当常用的模式,也是能够在C语言***现出来的最显性的模式之一.在面向对象里,状态模式允许一个对象在内部状态改变的时候改变其行为. 状态用法很多,最常见的是 ...

  5. C语言哈希表的简单实现——数组+链表(拉链法)

    C语言哈希表的简单实现--数组+链表(拉链法) 1.哈希表简介 哈希表详细介绍可以参考这篇文章 2.哈希表拉链法实现 2.1完全由本人思路实现,如有错误,欢迎批评指正 哈希声明文件hash.h /* ...

  6. c语言程序构建,c语言开发环境构建及简单的c程序设计.doc

    c语言开发环境构建及简单的c程序设计 实验x C语言开发环境构建及简单的C程序设计 一.实验目的 1.熟悉字符模式下的C程序编译和调试环境,基本掌握麒麟Linux字符模式下的编译工具和调试工具的使用: ...

  7. c语言编程坦克图案,用C语言的图像函数画一个简单的坦克图样

    用C语言的图像函数画一个简单的坦克图样 #include "graphics.h" #include "conio.h" void Tanke(int x,in ...

  8. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用attributes函数查看线性回归模型的属性信息、获取模型拟合对应的残差值residuals

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用attributes函数查看线性回归模型的属性信息.获取模型拟合对应的残差值residuals 目录

  9. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、可视化散点图并添加简单线性回归直线、添加模型拟合值数据点、添加拟合值点和实际数据点之间的线段表示残差大小、col参数自定义设置

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.可视化散点图并添加简单线性回归直线.添加模型拟合值数据点.添加拟合

最新文章

  1. OpenResty搭建高性能服务端
  2. 学习笔记(18):Python网络编程并发编程-守护进程
  3. 苹果汽车项目团队添猛将?外媒称Apple Watch负责人已调入
  4. CCF201709-1 打酱油(100分)
  5. win10新建管理员账户_电脑技巧|Win10家庭版如何开启超级管理员账户
  6. (十八)其他数据库对象,视图,序列
  7. Arcgis中修改属性字段名
  8. 深度学习关于分布式任务调度平台XXL-JOB框架详解
  9. 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
  10. 2019校招阿里数据研发/数据挖掘三面总结
  11. 有没有人用过迅捷PDF转换器?文件转换效果怎么样?
  12. 1328C Ternary XOR
  13. 选择美国虚拟主机时要考虑的事项
  14. X79主板win10启动卡住问题修复处理
  15. 眼动数据中瞳孔大小这个数据怎么用?
  16. 号称BI商业智能界的“四大天王”
  17. A Persona-Based Neural Conversation Model论文
  18. Requests爬虫实践:豆瓣读书Top250数据
  19. LeetCode 561 Array Partition I(数组划分)
  20. webpack react npm start报错解决 ERR_OSSL_EVP_UNSUPPORTED

热门文章

  1. 魔百盒CM102_晨星MSO9280芯片_安卓4.4.4_当贝桌面免拆卡刷及TTL固件包
  2. Elgamal加密算法原理及实现
  3. 单片机毕业设计 STM32智能无线防盗报警器 - 物联网 嵌入式
  4. 做盐雾试验适用的产品有哪些
  5. Firefox 火狐浏览器强制刷新(忽略缓存)的快捷键
  6. 明说PHPCMS(一)
  7. phpcms v9 之session配置
  8. Android实现音乐示波器、均衡器、重低音和音场功能
  9. 百度java热力图_百度地图 之 热力图
  10. 【GRNN回归】基于matlab遗传算法优化GRNN数据回归拟合【含Matlab源码 1401期】