이 C++ 프로그램에서 사용자 이름과 암호 (마스크 된)를 받아들이고 미리 값과 비교합니다. 동일하면 프로그램이 닫히고 그렇지 않으면 처음으로 돌아갑니다.
나는 패스워드 입력에 어려움을 겪었습니다. 특히 일반적인 입력을 흉내내는 것과 같이. 지금까지 나는 Enter와 Backspace 기능을 넣을 수 있었지만, 나는 단지 화살표 키를 얻는 것 같지 않다.
아래 코드를 사용하면 프로그램이 부분적으로 올바르게 작동하고 물론 왼쪽 키를 누를 때 커서가 두 번 뒤로 이동합니다. 그러나이 과정에서 현재의 문자를 '알파'기호와 이전 문자를 '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();
}
코드를 정리해야한다고 생각합니다. 왜냐하면 많은 것들이 의미를 갖지 않기 때문입니다. 예를 들어'i'를'0'으로 설정하는 대신'while (i! = 0) {-i;} '를 실행하는 이유는 무엇입니까? 또한, 처음에는 'i'를 0으로 설정 한 직후 'i + 1'크기의 배열을 만드는 이유는 무엇입니까? 'char parr [i + 1]'는 크기가 1 인 배열'parr'을 선언합니다. 따라서 나중에'parr [i] = ... '를 실행하면 메모리가 손상 될 수 있습니다. 더욱이,'parr'과 패스워드의 비교는 결코 사실이 아니며 "Welcome!" –
@ThomasWilmotte 프로그램은 전체 getasynckeystate 행 없이는 저를 위해 정상적으로 실행됩니다. –