C++-我的密码程序没有更改密码

C++- My Password Program is not changing Password

我创建了一个从用户那里获取密码的程序。用户还可以通过将原始密码保存在一个字符串中,然后将旧密码保存在一个新字符串中来更改密码,但如果两者都匹配,用户可以输入新密码,但即使我在新旧字符串中输入相同的密码,如果语句未返回 true 且密码未更改。 2,当我输入密码并按回车键时,回车也存储在密码中。 这是我的代码

void password(int n)
{
    string pass = "0", oldpass = "0";
    char ch = '0';
    if (n)
    {
        cout << "Enter Old Password: ";
        ch = _getch();
        while (ch != '\r')
        {
            oldpass.push_back(ch);
            cout << "*";
            ch = _getch();
        }
        cout << "Password is " << oldpass << endl;
        if (oldpass == pass)
        {
            cout << "Enter New Password: ";
            ch = _getch();
            while (ch != '\r')
            {
                pass.push_back(ch);
                cout << "*";
                ch = _getch();
            }
        }
        else
        {
            cout << "\nPassword Does Not Match" << endl;
            system("pause");
        }
    }
    else
    {
        cout << "No Password Found. Enter New Password... ";
        ch = _getch();
        while (ch != '\r')
        {
            pass.push_back(ch);
            cout << "*";
            ch = _getch();
        }
        cout << "Password is " << pass<<endl;
        cout << "\nPassword Saved Successfully" << endl;
        system("pause");
    }
}

输入未存储在您的密码中。

您对“0”的默认初始化是,并且最终会让您失望。从空字符串开始。

此外,您永远不会重置这两个密码的值,每次使用 string.push_back(char) 调用时都会附加这两个密码。请记住,函数中的变量不会持续存在,因此此后对该函数的每次调用都会将变量默认为其初始化值。

一个好的调试方法是在提示输入旧密码时显示两个字符串的值;你会看到每次调用函数都会将两个字符串默认为“0”,并且如果你在函数中使用循环,每个循环都会将更多字符附加到字符串而不是用你的字符串覆盖字符串重新期待。

基本上,在某个时候,无论是在任一字符串赋值之前还是之后,您都必须在重新使用之前擦除字符串中的先前值。