我在以前的C语言课程设计中做过民政局婚姻管理系统、导游系统。其中包含游客登录和管理员登录功能,但是自己的密码显示做的有问题,密码系统也做得不尽人意。
在这篇博客里,先把密码显示贴在下面,等过几天,把自己的密码系统完善之后再做一篇博客细讲。
带“*”无回显的密码显示代码如下:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define PWD_SIZE 18
void Key(char *key, int SIZE);
int main(){
char key[PWD_SIZE+1];
printf("请输入密码: ");
Key(key, PWD_SIZE);
printf("你输入的密码是: %s\n", key);
return 0;
}
void Key(char *key, int SIZE)
{
char ch;
int i = 0;
while(i<SIZE)
{
ch = getch();
if(ch == '\r')
{ //回车结束输入
printf("\n");
break;
}
if(ch=='\b' && i>0)
{ //按下删除键
i--;
printf("\b \b");
}
else if(isprint(ch))
{ //输入可打印字符
key[i] = ch;
printf("*");
i++;
}
}
key[i] = 0;
}
函数的参数key表示为保存密码的内存的首地址,SIZE表示密码的最大长度。
函数通过while循环不断读取用户输入的字符,然后将进行处理:
- 按下回车键,表示输入结束,getch()读取到\r;
- 按下删除键,表示删除一个字符,getch()读取到\b;
- 输入可打印字符,读取该字符并回显*
需要注意的是,getchar()将读取\n字符,getch()将读取到\r字符。