Loading... # 前言 没什么前言,题目是必须要练习的,这里会收集一些卡了我挺久的题目,说出我的一些思考方式以及解决方法,各位路过的大佬有其他的思路可以在评论区讨论。目前我还没学到指针,只是学到了比较基础的内容。 # 柜员机 **题目:制作一个柜员机,需要输入密码为1357 如果输入正确,显示正确,并进入项目 输入指定的数,如果为1,那么是取款业务(取款金额不能超过1000),显示取款金额 如果是2,查询服务,查看剩下的钱是多少,如果输入密码错误,即退出。** 乍一看还是比较简单的,可以直接判断密码,然后给密码定义一个四位数的范围就好。但是密码不一定非要是数字,也可能是 `0001、0111`之类的,所以直接进行判断不太理想,于是我考虑到了数组。 **最终完成的代码如下:** ```c++ #include <stdio.h> #include <conio.h> /* 制作一个柜员机,需要输入密码为1357 如果输入正确,显示正确,并进入项目 输入指定的数,如果为1,那么是取款业务(取款金额不能超过1000),显示取款金额 如果是2,查询服务,查看剩下的钱是多少,如果输入密码错误,即退出。 */ int pwd_ture[4] = { 1,3,5,7 };//通过数组存储正确密码,以防止0001之类的密码出现 int pwd[4] = {}; bool if_pwd = true; bool if_pwd_l = true; int num, money; int main() { printf("请输入四位数密码(密码无法看见是正常现象):"); for (int i = 0; i <= 3; i++) { pwd[i] = _getch();//每次循环单独存储一个字符 //debug //printf("%d\n", ascii_pwd); //printf("%d\n",pwd[1]); if ((pwd_ture[i] + 48) != pwd[i]) { if_pwd = false; } } /* if (pwd[4] >= 0) { if_pwd_l = false; } if (if_pwd_l == false) { printf("密码超出四位数"); }*/ if (if_pwd) { printf("密码正确,进入系统\n请输入业务号\n输入1为取款,输入2为查询:"); scanf_s("%d", &num); if (num >= 1 && num <= 2) { if (num == 1) { printf("请输入取款金额(不超过1000):"); scanf_s("%d", &money); if (money > 0 && money <= 1000) { printf("取款成功"); } else { printf("超出取款金额"); } } else if(num == 2) { printf("当前账户余额为:99999999999"); } } else { printf("业务号不合法"); } } else { printf("密码错误\n"); } } ``` ## getchar()函数 在敲代码的过程中发现了几个问题,对于函数的理解也加深了很多。首先是 `getchar()`函数,与 `scanf()`函数不同的是一个输入单字符、另外一个是可以输入多个字符。同时,`getchar()`函数输入的字符将会转换为 `ASCII码`存储(这一点是通过我自己的调试发现的,在一开始的判断密码是否正确的过程中给我整郁闷了,现在受教了) ## ASCII码转换 因为 `getchar()`函数输入的字符会以 `ASCII码`存储,所以我们可以通过 ```c++ pwd_ture[i] + 48 ``` 以上代码来进行转换,因为在ASCII码中,数字0在ASCII中为48,数字1在ASCII中为49....类推,那么 `0+48=48`、`1+48=49`如此就可以将ASCII转换为相对应的字符了。 ## _getch()与_getche()函数 在上面的代码中,我并没有使用 `getchar()`函数,我们先了解 `_getch()`、`_getche()`的作用以及与 `getchar()`的区别 **_getch()函数:** 输入的同时将字符储存,无需回车确认(好像输入的字符也是不可见的) **_getche()函数:** 输入字符的同时在控制台打印出输入的字符 考虑到柜台机输入的是密码,于是我选择使用 `_getch()`函数,并且该函数还可以解决一个问题(输入超出四位数的密码时,无论第五位以上的是什么数,都会判定为正确。这是因为for循环只是取了前四个字符,往后的字符并没有采用) Last modification:October 20, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 17 如果觉得我的文章对你有用,请随意赞赏