我有這個c + +程序接受用戶名和密碼(這是掩碼)並將它們與預設值進行比較。如果它們相同,則程序關閉,否則它將循環回到開頭。
我在輸入密碼時遇到了一些困難,尤其是模仿正常輸入。到目前爲止,我已經設置了輸入和退格功能,但我似乎不能正確地獲取箭頭鍵。
使用下面的代碼,程序的工作部分是正確的,當然,當按下左鍵時,它將光標向後移動兩次。但是在這個過程中,它也會用'alpha'符號和前面的字母替換爲'K'的當前字母。 (K和相鄰的字母符號似乎是我的編譯器,dev C++與左箭頭鍵關聯的值)
另外,當我刪除多餘的'\ 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();
}
我認爲你應該先清理你的代碼,因爲很多東西並不適合它。例如,爲什麼執行'while(i!= 0){--i;}'而不是將'i'設置爲'0'。另外,在開始時,爲什麼在將'i'設置爲0之後創建一個大小爲'i + 1'的數組? 'char parr [i + 1]'聲明瞭一個大小爲1的數組'parr'。所以稍後執行'parr [i] = ...'會導致內存損壞。而且,'parr'和密碼之間的比較永遠不會是真的,你永遠不會打印出「Welcome!」 –
@ThomasWilmotte沒有整個getasynckeystate行,該程序執行得很好。 –