4个回答
展开全部
用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!");
}
}
语句和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!");
}
}
展开全部
/*密码输入,回显星号的程序*/
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;
}
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*密码输入,回显星号的程序*/
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用getc()但是put('*')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询