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

DOS中getch()函数的退格和删除问题,c,dos,turbo-c,C,Dos,Turbo C,我在Windows平台英特尔x86体系结构上使用Turbo C编译器 在我的程序中,我从键盘扫描用户输入。它是一个登录密码程序,接受用户名和密码作为用户输入 对于用户名,我使用的是getchar(),在输入用户名时,如果用户按下键盘上的退格键,前一个字符会被删除,我的意思是,我不需要编写任何显式代码来执行此操作 但是对于密码,我使用getch()并在屏幕上显示*对应于每次击键。在这种情况下,如果用户按下键盘上的退格键,它不会删除上一个字符,而是将其作为另一个按键笔划,并在屏幕上显示与之对应的*号

我在Windows平台英特尔x86体系结构上使用Turbo C编译器

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

对于用户名,我使用的是getchar(),在输入用户名时,如果用户按下键盘上的退格键,前一个字符会被删除,我的意思是,我不需要编写任何显式代码来执行此操作

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

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


任何建议或解决方法…?

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

以下是获取密码的代码:

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();
inti;
字符c,*buf;
printf(“密码:”);
对于(i=0;(c=getch())!='\r';)
{
//检查输入的字符是否为退格注意:'\b'的ASCII值为8
如果(c!=8)
{
buf[i]=c;
printf(“*”);
i++;
}
其他的
{
我--;

如果(2011年的iTurbo C和DOS功能?真的吗?谢谢Zan先生。首先,我正在尝试切换到gcc和linux,但这需要一些时间。其次,我确实尝试了你的建议,但备份一个空格只会将光标移回屏幕上的一个空格。这并不会真的从屏幕上删除以前打印的*。有什么想法吗实现…??thanx很多Zan先生…我真是太蠢了,我想不出来…:D…thanx,它完全按照我想要的那样工作。