首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

:密码无回显的有关问题

2012-03-02 
求助:密码无回显的问题问题描述:在MS-DOS下,提示用户输入密码PASSWORD:当用户输入密码时,屏幕上显示一连串

求助:密码无回显的问题
问题描述:

在MS-DOS下,提示用户输入密码

PASSWORD:

当用户输入密码时,屏幕上显示一连串的 "* "号,起保护密码的作用.

PASSWORD:******

具体的实现方法如何?毫无头绪,大家一起来出出主意,感激不尽.

[解决办法]
#include <stdio.h>
#include <conio.h>


int main()
{
printf( "Please input the password: ");

char ch;
char password[100]={ '\0 '};

int i=0;
while( (ch=_getch())!= '\r ') {
putchar( '* ');
password[i] = ch;
++i;
if (i==100) break;
}

printf( "\nyou have input:%s ", password);

_getch();

return 0;
}

[解决办法]
同意ls的
收到一个字符后,就打出一个*,然后接收
[解决办法]
#include <iostream>
#include <string>
#include <conio.h>
#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 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 ;
}

if( ch <32 || ch> 127 ) continue; /*密码只能为ASCII码值为32-127的字符*/

printf( "* "); /*上述情况都不是则显示一个星*/
password[i++]=ch; /*将ch赋给password[i],已显示星数加一,数组索引值加一*/
}
password[i] = '\0 '; /*设置结尾的空字符*/
return i;
}
[解决办法]
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char password[100];
int index=0;
while(1)
{
char ch;
ch=getch();
if(ch==8) //退格键
{
if(index!=0)
{
cout < <char(8) < < " " < <char(8);
index--;
}
}
else if(ch== '\r ') //回车键
{
password[index]= '\0 ';
cout < <endl;
break;
}
else
{
cout < < "* ";
password[index++]=ch;
}
}
//cout < < "password: " < <password < <endl;
return 0;
}

热点排行
Bad Request.