c - 如何管理 C 程序中的密码错误?

标签 c

所以发生的情况是,当我在这个程序中输入退格键时,一个字母就会被删除。但是如果我长时间按退格键,-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/

相关文章:

C、Fork(),采用 CL 参数并执行 CHDIR

c++ - 如何在 C++ 程序中包含流程工具?

c - 找出特定目录所在的文件系统大小和名称

C - printf 显示意外的输出

c - 为什么不能将作为输入参数传递给函数的二维数组在其函数声明中声明为 int**?

c - 按头和节点制作链表

c - 有没有办法从c中的基地址获取完整数组?

c++ - 如何将 etrace 与动态库一起使用以按时间顺序跟踪 C++ 中的函数调用?

Char 未转换为 int

c - 编写可移植 C 时要考虑什么?