数组输入 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。在您的情况下,这将执行相同的操作:跳转到循环的开头。
然后 运行 一个调试器,观察如果你输入退格键你的数组会发生什么。