0

Windowsプラットフォーム、Intelx86アーキテクチャでTurboCコンパイラを使用しています。

私のプログラムでは、キーボードからのユーザー入力をスキャンしています。これは、ユーザー入力としてユーザー名とパスワードを取り込むログインパスワードプログラムです。

getchar()を使用しているユーザー名の場合、ユーザーがバックスペースキーを押すとユーザー名を入力しているときに、キーボードで前の文字が削除されます。つまり、明示的なコードを記述する必要はありません。これを行う。

しかし、私が使用しているパスワードについては、getch()を使用しており、すべてのキーストロークに対応して、画面に*を表示しています。この場合、ユーザーがキーボードのバックスペースキーを押すと、前の文字は削除されませんが、別のキーストロークと見なされ、それに対応する*が画面に表示されます。

bios.hからbioskeyを試し、\ bを使用して回避しようとしましたが、どれも機能しませんでした。

提案や回避策....????

4

2 に答える 2

1

もちろん。あなた自身のためにキャラクターを追跡してください。プログラムが*を表示するようにバックスペースを受け取っている場合は、その文字を確認して1つのスペースをバックアップします。1つのスペースをバックアップした後、スペースを印刷して*を消去してから、再度バックアップします。

于 2011-11-15T06:20:03.043 に答える
0

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

これがお役に立てば幸いです。..:-D:-D. ..

于 2014-04-09T17:47:51.927 に答える