所以发生的情况是,当我在这个程序中输入退格键时,一个字母就会被删除。但是如果我长时间按退格键,-1 就会开始打印......
这是什么原因以及如何解决这个问题?
system("cls");
char password[25], temp;
char correctpass[10]="basket@123";
int f=0;
label:
drawBorder(5,3,100,24);
gotoxy(40,12);
printf("Enter the password : ");
while (1) {
temp = getch();
if (temp == 13)
break;
else if(f<0){
printf("%d",f);
}
else if (temp == 8){
printf("\b");
printf(" ");
printf("\b");
f--;
}
else{
password[f] = temp;
printf("*");
f++;
}
}
password[f] = '\0';
最佳答案
只需不要退格到password
数组的开头即可。即,如果 f
已经为零,则不要递减 f
。
同样,您应该添加一项检查,以防止递增 f
超过 password
数组末尾减去终止 NUL 的一个字符。
为了支持输入重定向并防止陷入无限循环,检查文件结尾也很有用。
char password[25] ;
int f = 0 ;
int ch = 0 ;
printf("Enter the password : ");
for(;;)
{
ch = getch();
if( ch == EOF || ch == '\n' )
{
password[f] = '\0' ;
break ;
}
else if( ch == '\b' )
{
if( f > 0 )
{
printf("\b \b");
f--;
}
}
else if( f < sizeof(password) - 1 )
{
password[f] = ch ;
printf( "*" ) ;
f++;
}
}
关于c - 如何管理 C 程序中的密码错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59470430/