数组输入C ++中的退格键

时间:2016-07-31 08:13:12

标签: c++ arrays login dev-c++ backspace

以下是登录程序的代码,该程序输入用户名,然后输入密码,同时为输入的每个字符回显“*”,然后将用户名和密码与预设值进行比较,以查看它们是否匹配并退出程序如果是真的,那么它会回到开头。

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,我们都知道它们的暴行。请建议我一种方法来避免这种情况,并使所有这些代码比当前凌乱的状态更整洁。

1 个答案:

答案 0 :(得分:1)

使用continue代替goto。在你的情况下,这将做同样的事情:跳到循环的开始。
然后运行调试器并观察输入退格时数组会发生什么。