前言
当我们在做一个类似于银行登录系统,或者其他登录系统,在用户登录的时候,为了不让输入的密码显示在屏幕上,以提高安全性的时候,我们可以选择用户输入密码的时候回显出*号来代替密码显示在屏幕上,从而达到提高安全性的目的。
这时候我们就想到了一个函数,看一下它的解释...
getch ()是编程中所用的函数,这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性! 用ch=getch ();会等待你按下 任意键 之后,把该键 字符 所对应的ASCII码赋给ch,再执行下面的语句。
特别是红色字体的部分,所以在Linux系统中使用这个函数,是非常的麻烦,我还没有找到它在Linux系统里面使用的方法,所以我在网上找了一个比较靠谱的博主,参考了一下他的思路,
正文
使用getchar()函数来实现输入密码回显*号的功能,实测可以使用,无需受移植性的问题困扰,在其基础上简化了部分代码。
#include <stdio.h>
#include <stdlib.h>
#define BACKSPACE 0x08 //删除键的asccll码值
int InputCode(char *pass)
{
int i=0;
system("stty -icanon"); //设置一次性读完操作,即getchar()不用回车也能获取字符
system("stty -echo"); //关闭回显,即输入任何字符都不显示
while(i < 16) //这里是输入密码的位数,可在定义输入密码的长度
{
pass[i]=getchar(); //获取键盘的值到数组中
if(i == 0 && pass[i] == BACKSPACE)
{
i=0; //若开始没有值,输入删除,则,不算值
pass[i]='\0';
continue;
}
else if(pass[i] == 127)
{
printf("\b \b"); //若删除,则光标前移,输空格覆盖,再光标前移
pass[i]='\0';
i--; //返回到前一个值继续输入
continue; //结束当前循环
}
else if(pass[i] == '\n') //若按回车则,输入结束
{
pass[i]='\0';
break;
}
else
{
printf("*"); //使密码以*号输出
i++;
}
}
return 0;
}
int main(void)
{
char pass[16];
printf("请输入密码:");
InputCode(pass);
printf("\n密码:%s",pass);
return 0;
}
效果图
今天的分享也到这里了,依然觉得做项目是巩固知识的最好方法,respect共勉!!