C语言怎么使用密码输入,也就是输入回显星号。

在C控制台里输入密码,怎么样使得回显星号啊?... 在C控制台里输入密码,怎么样使得回显星号啊? 展开
 我来答
应阑次念文
2020-01-07 · TA获得超过3799个赞
知道大有可为答主
回答量:3110
采纳率:34%
帮助的人:433万
展开全部
用for
语句和getch(
);putchar
(‘*’);来实现的,而getch
不分区另ENTER和BACKSPACE等特殊键,不好控制它的结束。因此只有避过问题强行规定密码必须是8位的,但在输入密码时仍然不允许用户输入ENTER和BACKSPACE等特殊键。
以下程序功能:
接受所有打印字符。
不接受控制字符,如Ctrl+
,Alt,F1等。
可使用退格键删除以输入字符。
回车键为密码输入完毕
可定义最大字符数。当输入字符数等于最大字符个数时,视为密码结束。
#include
<stdio.h>
#include
<conio.h>
#define
TRUE
1
#define
FALSE
0
#define
MIN_INPUT
0x20
#define
MAX_INPUT
0x7e
/*
*
所有功能有此函数实现:
*
pszPw

保存密码的缓冲
*
iMaxSize
:最大的密码长度,该长度必须小于缓冲区大小。
*
返回值为TRUE为成功获取密码。总是返回TRUE
*/
int
GetPassword(unsigned
char*
pszPw,int
iMaxSize)
{
unsigned
char
ch;
int
i=0;
int
bIsEcho=TRUE;
//while(
!
kbhit()
&&
i<iMaxSize
)
while(
(
ch
=
(unsigned
char)getch()
)
&&
i
<
iMaxSize
)
{
//ch
=
(unsigned
char)getch();
bIsEcho=TRUE;
if
(
ch
==
13)
{
pszPw[i++]=0;
break;
}
else
if
(
ch
>=
MIN_INPUT
&&
ch
<=
MAX_INPUT)
/*所有可打印字符*/
{
pszPw[i++]=ch;
}
else
if
(
ch
==
8
&&
i>
0
)
/*退格键*/
{
pszPw[i--]
=
0;
bIsEcho
=
FALSE;
putchar(
ch
);
putchar(
'
'
);
putchar(
ch
);
}
else
bIsEcho
=
FALSE;
if(bIsEcho)
putchar('*');
}
pszPw[i]=0;
return
TRUE;
}
int
main(void)
{
int
iMaxSize=80;
unsigned
char
pw[99];
if
(
GetPassword(pw,iMaxSize)
==
TRUE
){
printf("\npassword=%s",pw);
}
else{
printf("\nCan
not
get
the
password!");
}
}
百度网友6579aaa9e
2007-08-08 · TA获得超过3602个赞
知道小有建树答主
回答量:1222
采纳率:0%
帮助的人:1132万
展开全部
/*密码输入,回显星号的程序*/

int main(void)
{
int i;
static char str[80]; /*静态存储*/

clrscr();
for (i=0; i<80; i++)
{
str[i] = getch(); /*逐次赋值,但不回显*/
printf("*"); /*以星号代替字符个数*/
if (str[i] == '\x0d')/*回车则终止循环*/
{
break;
}
}
printf("\n");
i = 0;
while (str[i] != '\x0d')
{
printf("%c", str[i++]);/*依次输出各元素*/
}
printf("\n");
getch();
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帛邵牛侠
2019-01-09 · TA获得超过3597个赞
知道大有可为答主
回答量:3110
采纳率:28%
帮助的人:215万
展开全部
/*密码输入,回显星号的程序*/
int
main(void)
{
int
i;
static
char
str[80];
/*静态存储*/
clrscr();
for
(i=0;
i<80;
i++)
{
str[i]
=
getch();
/*逐次赋值,但不回显*/
printf("*");
/*以星号代替字符个数*/
if
(str[i]
==
'\x0d')/*回车则终止循环*/
{
break;
}
}
printf("\n");
i
=
0;
while
(str[i]
!=
'\x0d')
{
printf("%c",
str[i++]);/*依次输出各元素*/
}
printf("\n");
getch();
return
0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1d8e8b9
2007-08-08 · TA获得超过913个赞
知道小有建树答主
回答量:589
采纳率:60%
帮助的人:323万
展开全部
使用getc()但是put('*')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式