众所周知,一个良好的密码输入程序是在用户输入密码时不显示密码本身,只回显星号。或者,在安全性要求更高的某些程序中,什么都不显示。那么,在C语言中如何实现它呢?
getc()和getchar()函数想必大家都经常用到,但它们都在输入的同时显示输入内容,并由回车终止输入。为了不显示输入内容,我们调用另外一个函数getch(),它包含在头文件中。该函数可以在输入的同时不显示输入内容,并在输入完成后不需回车而自动终止输入。与此同时,该头文件中还包含另外一个函数getche(),它和getch()功能相同,唯一的区别是输入的同时显示输入的内容。本文我们只用到getch();
一、输入密码回显星号
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#defineMAX_PASSWD_LEN 16
charpasswd[MAX_PASSWD_LEN+1]="";
char*GetPasswd()
{
unsignedcharc;
inti=0;
while((c=getch())!='\r')
{
if(i<MAX_PASSWD_LEN&&isprint(c))
{
passwd[i++]=c;
putchar('*');
}
elseif(i>0&&c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
passwd[i]='\0';
returnpasswd;
}
二、输入密码不回显
与回显星号的代码基本相同,只是去掉打印输出的代码。
#include<conio.h>
#include<ctype.h>
#defineMAX_PASSWD_LEN 16
charpasswd[MAX_PASSWD_LEN+1]="";
char*GetPasswd()
{
unsignedcharc;
inti=0;
while((c=getch())!='\r')
{
if(i<MAX_PASSWD_LEN&&isprint(c))
{
passwd[i++]=c;
}
elseif(i>0&&c=='\b')
{
--i;
}
}
passwd[i]='\0';
returnpasswd;
}