数组输入C++中的退格

Backspace in array input C++

本文关键字:输入 C++ 数组      更新时间:2023-10-16

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

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 = '';
                parr[i] = '';
                cout << ' ' << 'b';
                goto tag;
            }
            parr[i] = ch;
            ch = '*';
            cout << ch;
            ++i;
        }
        parr[i] = '';
        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,我们都知道它的暴行。请给我一个避免这种情况的方法,同时让所有这些代码比它当前的混乱状态更整洁。

使用continue而不是goto。在您的情况下,这将执行相同的操作:跳到循环的开始
然后运行调试器,观察如果输入退格,数组会发生什么。