为啥退位也会被输入哦,是不是你编译器的问题😂
参考一下:注意其中 if(c=='b')的处理即为对删除键的处理,通过输出\b\b的方式实现*号删除,同时输入的字符串要将当前字符设置为0,计数标志都要回退一位
# include <stdio.h>
# include <conio.h> //getch()
# define MAX_PW_LEN 16 //密码最大长度
void getPassword(char * storePw, int maxPwLen)
{
char c = '\0'; //存放用户键入的每个字符
char * pc = storePw; //为方便指向密码字符串中每个字符
int pwlen = 0; //当前password的长度
while(1)
{
c = getch();
if (c == '\b')
{
if (pwlen >0)
{
*pc = 0;
pc--;
pwlen--;
printf("\b \b"); //退格退的是光标,用个空格覆盖,假装撤销打印的星号*
}
continue;
}
//如果用户按下回车符,停止循环
if (c == '\r')
break;
//将用户输入的有效字符存入密码串,不考虑空字符'\0'
if (pwlen >= 0 && pwlen < maxPwLen-1 && c)
{
*pc = c;
pc++;
pwlen++;
putchar('*');
}
}
}
getch的功能是获取一个字符,所有字符都会被获取,修改了一段,参考着修改一下你的代码即可:
void xg()
{
int i,j;
char word[7],word1[7],word2[7],ch;
system("cls");
printf("请输入原密码");
for (i=0;i<=5;i++)
{
ch = getch();
if(ch <= 0x1f && ch != 0x08)
{
i--;
continue;
}else if (ch == 0x08 ) //退格
{
i--;
system("cls");
printf("请输入原密码");
for(j=0;j<i;j++)
putchar('*');
continue;
}else
{
putchar('*');
word[i]=ch;
}
}
word[6] = '\0';
printf("\n");
//下面的处理方式类似,自己添加一下吧
}