作者在 2010-04-12 19:20:31 发布以下内容
#include <stdio.h>
int inputpw (char *password,int len); /*len为密码的最长长度*/
main (void)
{ int l;
char pw[13];
l=inputpw(pw,12);
printf("\n刚才输入%d位的密码:%s",l,pw);
return 0;
}
{ int l;
char pw[13];
l=inputpw(pw,12);
printf("\n刚才输入%d位的密码:%s",l,pw);
return 0;
}
int inputpw(char *password,int len)
{
int i=0; /*密码数组索引值,同时也表示记录已显示星的数目,初始化值为0*/
char ch;
printf("\n请输入密码(长度小于等于%d位): ",len);
fflush(stdin); /*清洗流,以防妨碍密码正确输入*/
for ( ch = getch(); ch!=13;ch = getch() ) /*若用户输入回车则结束密码输入*/
{
if (i>=len) continue; /*如果已到达len指定的长度则……*/
if ( ch == 8 ) /*若用户按了退格键则……*/
{
if ( i > 0 ) /*如果已显示星数不为0则……*/
{
printf("\b"); /*退一个格*/
password[--i]='\0'; /*password[i-1]的值改为'\0', 已显示星数减一,数组索引值减一*/
}
putchar(0); /*显示空字符*/
printf("\b"); /*退一个格*/
continue ;
}
{
int i=0; /*密码数组索引值,同时也表示记录已显示星的数目,初始化值为0*/
char ch;
printf("\n请输入密码(长度小于等于%d位): ",len);
fflush(stdin); /*清洗流,以防妨碍密码正确输入*/
for ( ch = getch(); ch!=13;ch = getch() ) /*若用户输入回车则结束密码输入*/
{
if (i>=len) continue; /*如果已到达len指定的长度则……*/
if ( ch == 8 ) /*若用户按了退格键则……*/
{
if ( i > 0 ) /*如果已显示星数不为0则……*/
{
printf("\b"); /*退一个格*/
password[--i]='\0'; /*password[i-1]的值改为'\0', 已显示星数减一,数组索引值减一*/
}
putchar(0); /*显示空字符*/
printf("\b"); /*退一个格*/
continue ;
}
if( ch<32 || ch>127 ) continue; /*密码只能为ASCII码值为32-127的字符*/
printf("*"); /*上述情况都不是则显示一个星*/
password[i++]=ch; /*将ch赋给password[i],已显示星数加一,数组索引值加一*/
}
password[i] = '\0'; /*设置结尾的空字符*/
return i;
}
printf("*"); /*上述情况都不是则显示一个星*/
password[i++]=ch; /*将ch赋给password[i],已显示星数加一,数组索引值加一*/
}
password[i] = '\0'; /*设置结尾的空字符*/
return i;
}