getc()和getchar()函数想必大家都经常用到,但它们都在输入的同时显示输入内容,并由回车终止输入。为了不显示输入内容,我们调用另外一个函数getch(),它包含在头文件中。该函数可以在输入的同时不显示输入内容,并在输入完成后不需回车而自动终止输入。与此同时,该头文件中还包含另外一个函数getche(),它和getch()功能相同,唯一的区别是输入的同时显示输入的内容。本文我们只用到getch();
一、输入密码回显星号
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define MAX_PASSWD_LEN 16
char passwd[MAX_PASSWD_LEN + 1] = "";
char *GetPasswd()
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c))
{
passwd[i++] = c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
passwd[i] = '\0';
return passwd;
}
二、输入密码不回显
与回显星号的代码基本相同,只是去掉打印输出的代码。
#include <conio.h>
#include <ctype.h>
#define MAX_PASSWD_LEN 16
char passwd[MAX_PASSWD_LEN + 1] = "";
char *GetPasswd()
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c))
{
passwd[i++] = c;
}
else if (i>0 && c=='\b')
{
--i;
}
}
passwd[i] = '\0';
return passwd;
}