私はこのユーザー名とパスワード(マスクされている)を受け入れ、それらをプリセット値と比較するこのC++プログラムを持っています。それらが同じであれば、プログラムは終了し、それ以外の場合は最初にループバックします。
パスワードの入力に問題がありました。特に、通常の入力を模倣しました。これまでのところ、私はEnterとBackspaceの機能を追加することができましたが、私はちょうど矢印キーを正しく取得することはできません。
以下のコードでは、プログラムは部分的にうまく動作しますが、もちろん、左キーが押されるとカーソルが2回前に移動します。しかし、このプロセスでは、現在のアルファベットを 'アルファ'記号と前の文字を 'K'に置き換えます。 (Kと互いに隣り合っているアルファ記号は、私のコンパイラdevC++が左矢印キーと関連づけている値のようです)
また、余分な '\ b'を取り除くと、前の文字を 'K'に置き換えます。私は今何をすべきかわからないので、私はあなたに尋ねます。前もって感謝します!パスワード入力時のカーソル移動C++
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <windows.h>
using namespace std;
int main()
{
int i=0;string u;char parr[i+1],ch;
while (1)
{
system("cls");
cout<<"Enter username."<<endl;
cin>>u;
system("cls");
cout<<"Enter password."<<endl;
i=0;
while (1)
{
ch=getch();
if (ch=='\r') break;
if (GetAsyncKeyState(VK_LEFT)) cout<<'\b'<<'\b';
if (ch=='\b')
{
cout<<'\b';
while (i!=0) {--i;}
ch='\0';
parr[i]='\0';
cout<<' '<<'\b';
continue;
}
parr[i]=ch;
ch='*';
cout<<ch;
++i;
}
parr[i]='\0';
string p="password";
if (u=="username" && parr==p)
{
system("cls");
cout<<"Welcome!";
break;
}
else
{
system("cls");
cout<<"Username and password entered does not match! Please try again.";
}
getch();
}
getch();
}
私はあなたが最初にコードを掃除しなければならないと思っています。なぜなら、多くのことは意味をなさないからです。例えば、 'i'を' 0'にするのではなく、 'while(i!= 0){-i;}'をなぜ実行するのですか?また、最初は 'i'を0に設定した直後に' i + 1'サイズの配列を作成するのですか? 'char parr [i + 1]'はサイズ1の配列 'parr'を宣言します。したがって、' parr [i] = ... 'を後で実行するとメモリが破壊される可能性があります。さらに、 'parr'とパスワードとの比較は決して真実ではなく、「ようこそ! –
@ThomasWilmotteこのプログラムは、getasynckeystate行全体がなくてもうまく動作します。 –