我想在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();
我编译了这段代码,但似乎功能不起作用,因为密码没有被屏蔽。这是一张显示发生情况的图片:
我试图解决问题,但我无法弄明白。
答案 0 :(得分:1)
我不知道你如何比较密码。但是,您正使用pass
初始化setPass()
函数中的= " ";
字符串。请注意,该函数始终返回使用无用的空格字符开始的密码。
Enter password: ****
Output: " asdf"
其次,我在这部分中没有看到cin
的任何目的:
cin >> pwd;
pwd = setPass();
我修复了我在这里提到的这些东西,编译了代码,它可以按你的需要工作。