数组输入 C++ 中的退格键
Backspace in array input C++
下面是一个登录程序的代码,先输入用户名,然后输入密码,同时为每个输入的字符回显'*',然后将用户名和密码与预设值进行比较,看是否匹配并退出程序如果为真,则返回开始。
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 = '[=10=]';
parr[i] = '[=10=]';
cout << ' ' << '\b';
goto tag;
}
parr[i] = ch;
ch = '*';
cout << ch;
++i;
}
parr[i] = '[=10=]';
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();
}
现在,问题来了:最近,我发现这种输入方法(用于密码)不能按预期使用退格键、删除键或箭头键。所有这些键都输入某些符号,而不是删除字符或移动光标。所以我尝试了退格键的解决方法(目前仅限)。一切正常-当我按退格键时,前一个字符被删除了,但最后,在与预设值进行比较后,显示密码不匹配。
如果可以,请在以下方面帮助我:
*工作退格功能(如果可能,还有删除键和箭头键)
*在程序的任何一点按 Esc 键退出程序。
*我在这个程序中使用了goto
,其暴行我们都知道。请建议我避免这种情况的方法,并使所有这些代码比当前的混乱状态更整洁。
使用 continue
而不是 goto
。在您的情况下,这将执行相同的操作:跳转到循环的开头。
然后 运行 一个调试器,观察如果你输入退格键你的数组会发生什么。
下面是一个登录程序的代码,先输入用户名,然后输入密码,同时为每个输入的字符回显'*',然后将用户名和密码与预设值进行比较,看是否匹配并退出程序如果为真,则返回开始。
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 = '[=10=]';
parr[i] = '[=10=]';
cout << ' ' << '\b';
goto tag;
}
parr[i] = ch;
ch = '*';
cout << ch;
++i;
}
parr[i] = '[=10=]';
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();
}
现在,问题来了:最近,我发现这种输入方法(用于密码)不能按预期使用退格键、删除键或箭头键。所有这些键都输入某些符号,而不是删除字符或移动光标。所以我尝试了退格键的解决方法(目前仅限)。一切正常-当我按退格键时,前一个字符被删除了,但最后,在与预设值进行比较后,显示密码不匹配。
如果可以,请在以下方面帮助我:
*工作退格功能(如果可能,还有删除键和箭头键)
*在程序的任何一点按 Esc 键退出程序。
*我在这个程序中使用了goto
,其暴行我们都知道。请建议我避免这种情况的方法,并使所有这些代码比当前的混乱状态更整洁。
使用 continue
而不是 goto
。在您的情况下,这将执行相同的操作:跳转到循环的开头。
然后 运行 一个调试器,观察如果你输入退格键你的数组会发生什么。