Backspace и удалить проблемы с функцией getch () в DOS - PullRequest
0 голосов
/ 15 ноября 2011

Я использую компилятор Turbo C на платформе Windows, архитектура Intel x86.

В моей программе я сканирую ввод пользователя с клавиатуры. Это программа для входа в систему, которая использует имя пользователя и пароль в качестве пользовательских данных.

Для имени пользователя я использую getchar (), где при вводе имени пользователя, если пользователь нажимает клавишу возврата на клавиатуре, предыдущий символ удаляется, сам по себе, я имею в виду, мне не нужно писать какие-либо явный код для этого.

Но для пароля я использую getch () и соответствует каждому нажатию клавиши, которое я отображаю * на экране. В этом случае, если пользователь нажимает клавишу возврата на клавиатуре, он не удаляет предыдущий символ, а вместо этого воспринимает его как еще одно нажатие клавиши и отображает *, соответствующий ему на экране.

Я опробовал bioskey из bios.h, попытался использовать \ b для обхода, ни один не сработал.

Любые предложения или обходные пути .... ????

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Конечно.Следите за персонажами для себя.Если ваша программа получает backspace и отображает *, проверьте этот символ и сделайте резервную копию на один пробел.Сделав резервную копию одного пробела, напечатайте пробел, чтобы стереть *, затем снова сделайте резервную копию.

0 голосов
/ 09 апреля 2014

Вот код для получения пароля:

int i;
char c,*buf;
printf("Password: ");
for(i=0;(c=getch())!='\r';)
{
     //checking wheter the entered character is backspace  NOTE: ASCII value for '\b' is 8
    if(c!=8)
    {
        buf[i]=c;
        printf("*");
        i++;
    }
    else
    {
        i--;
        if(i<0)
            i++;
        else
            printf("\b \b");//implementing the effect of backspace
    }
}
buf[i]='\0';//terminating the password string 
printf("%s",buf);//to check the input password is stored correctly or not, i displayed them
getch();

Я надеюсь, что это поможет вам ..: -D: -D ..

...