DOS 中 getch() 函数的退格和删除问题

发布于 2024-12-15 21:30:32 字数 370 浏览 0 评论 0原文

我在 Windows 平台、Intel x86 架构上使用 Turbo C 编译器。

在我的程序中,我正在扫描键盘上的用户输入。它是一个登录密码程序,接收用户名和密码作为用户输入。

对于我使用 getchar() 的用户名,在输入用户名时,如果用户按键盘上的退格键,前一个字符将被删除,它本身,我的意思是我不需要编写任何显式代码做这个。

但对于密码,我使用 getch() 并对应于每次击键,我在屏幕上显示一个 *。在这种情况下,如果用户按下键盘上的退格键,它不会删除前一个字符,而是将其视为另一个击键,并在屏幕上显示与其相对应的*。

我尝试了bios.h中的bioskey,尝试使用\b来解决,但没有成功。

任何建议或解决方法......???

I am using the Turbo C compiler on a Windows platform, Intel x86 architecture.

In my program I am scanning user input from the keyboard. It is a login password program that takes in username and password as user inputs.

For the username I am using getchar(), where while entering the username if the user presses the backspace key, on the keyboard, the previous character gets deleted, on it's own, I mean I don't need to write any explicit code to do this.

But for the password I am using getch() and corresponding to every keystroke I am displaying a * on the screen. In this case if user presses the backspace key on the keyboard, it does not delete the previous character, but rather takes it as another key stroke and displays a * corresponding to it on the screen.

I tried out bioskey from bios.h, tried using \b to work around, none worked.

Any suggestions or workarounds....????

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

卸妝后依然美 2024-12-22 21:30:33

当然。自己跟踪角色。如果您的程序接收退格键并显示 *,则检查该字符并备份一个空格。备份一个空格后,打印一个空格以删除*,然后再次备份。

Sure. Keep track of the characters for yourself. If your program is receiving the backspace so that it displays a *, then check for that character and back up one space. After backing up one space, print a space to erase the *, then back up again.

一梦等七年七年为一梦 2024-12-22 21:30:33

这是获取密码的代码:

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 ..

Here is the code to get the passowrd:

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();

I hope that this will help you.. :-D:-D..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文