密码屏蔽(输入显示为********)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码屏蔽(输入显示为********)相关的知识,希望对你有一定的参考价值。
我写了一个程序,从用户输入输入他的用户名和密码,但我想要的是,当用户输入他的密码时,它显示为*****而不是英文,就像我们在Gmail中输入密码一样。
我在互联网上研究,我已经设法编写这个程序,但我不能输入任何密码。我也不完全理解我写的代码。
class user
{
private:
string name;
string pass;
public:
void mask()
{
char c;
for(int i=0;i<100;i++)
{
c=getch();
if(c=='
')
break;
std::cout<<"*";
pass=pass+c;
}
}
void getdata()
{
int flag=0;
do
{
cout<<"Enter username: ";std::getline(std::cin,name);
cout<<endl;
cout<<"Enter password: ";mask();
cout<<endl;
if((name=="myname")&&(pass=="tiger"))
{
cout<<"
Login successful"<<endl;
flag=1;
}
else
cout<<"
Invalid username or password
Hint:Your username and password is myname and tiger"<<endl<<endl;
}while(flag==0);
}
};
答案
问题已经被问到,不管这是我的实现它只接受有效的输入(数字和字母可以很容易地改变),它支持退格
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main()
{
string password = "";
while (!GetAsyncKeyState(VK_RETURN) & 1)
{
for (int i = 0x30; i < 0x5A; i++)
{
if (GetAsyncKeyState(i) & 1)
{
if (i >= 0x41 && i <= 0x5A && ((GetKeyState(VK_CAPITAL) & 1) == 0 || GetAsyncKeyState(VK_SHIFT) & 1))
password += ((char)i + 32);
else
password += (char)i;
cout << "*";
Sleep(50);
}
else if (GetAsyncKeyState(VK_BACK) & 1)
{
password.erase(password.size() - 1);
system("cls");
for (int i = 0; i < password.size(); i++)
{
cout << '*';
}
Sleep(50);
}
}
}
cout << password;
Sleep(10000);
}
以上是关于密码屏蔽(输入显示为********)的主要内容,如果未能解决你的问题,请参考以下文章