【发布时间】:2016-02-09 17:41:47
【问题描述】:
我想用c++实现一个登录表单,所以写了一个函数如下:
string setPass(bool show_asterisk = true)
{
const char BACKSPACE = 8;//ASCII code for BACKSPACE Key
const char ENTER = 13;//ASCII code for ENTER Key
string pass = " ";//initialize string
char c = ' ';//initialize character
while ((c = _getch()) != ENTER)
{
if (c == BACKSPACE)
{
if (pass.length() != 0)
{
if (show_asterisk)
cout << "\b \b";
pass.resize(pass.length() - 1); //resize the length of pass
}
}
else if (c == 0 || c == 224)//when player press esc key
{
_getch();
continue;
}
else
{
pass.push_back(c);
cout << '*';
}
}
cout << endl;
return pass;
}
下面是执行函数的代码:
cout << "==================" << endl;
cout << " login " << endl;
cout << " ID:";
cin >> id;
cout << " Password:";
cin >> pwd;
pwd = setPass();
我编译了这段代码,但该功能似乎不起作用,因为密码没有被屏蔽。这是一张显示发生了什么的图片:
我试图解决这个问题,但我无法解决。
【问题讨论】:
-
您最好在密码提示启动时发出终端控制序列来禁用键盘输入的回显。使用您的方法,仍然有一个很小但存在的间隔,其中字符已输入但尚未删除。适当的安全措施是首先根本不显示它。
标签: c++ visual-c++ terminal