以下是登录程序的代码,该程序输入用户名,然后输入密码,同时为输入的每个字符回显“*”,然后将用户名和密码与预设值进行比较,以查看它们是否匹配并退出程序如果是真的,那么它会回到开头。
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)
{
tag:ch = getch();
if (ch == '\r')
{
break;
}
if (ch == '\b')
{
cout << '\b';
--i;
ch = '\0';
parr[i] = '\0';
cout << ' ' << '\b';
goto tag;
}
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();
}
现在,问题出在这里:最近,我发现这种输入方法(用于密码)与Backspace,Delete或箭头键无法正常工作。所有这些键都输入某些符号,而不是删除字符或移动光标。所以我尝试了退格键的解决方法(目前只有)。一切正常 - 我按下退格键时删除了前一个字符,但最后,在与预设值进行比较后,显示密码不匹配。
如果你能在以下方面帮助我:
*工作退格功能(如果可能,还有删除和箭头键)
*在程序的任何一点按Esc退出。
*我在这个程序中使用了goto
,我们都知道它们的暴行。请建议我一种方法来避免这种情况,并使所有这些代码比当前凌乱的状态更整洁。
答案 0 :(得分:1)
使用continue
代替goto
。在你的情况下,这将做同样的事情:跳到循环的开始。
然后运行调试器并观察输入退格时数组会发生什么。