Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-我的密码程序没有更改密码_C++_String_Passwords - Fatal编程技术网

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

C++ C++;-我的密码程序没有更改密码,c++,string,passwords,C++,String,Passwords,我已经创建了一个程序,从用户那里获取密码。用户还可以通过将原始密码保存在字符串中,然后将旧密码保存在新字符串中来更改密码,但如果两者都匹配,则用户可以输入新密码,但即使我在新字符串和旧字符串中输入相同的密码,if语句也不会返回true,并且密码不会更改。 第二,当我输入密码并按enter键时,enter也存储在password中。 这是我的密码 void password(int n) { string pass = "0", oldpass = "0"; char ch = '

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

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");
    }
}
void密码(int n)
{
字符串pass=“0”,oldpass=“0”;
char ch='0';
如果(n)
{

密码中未存储coutEnter

默认的“0”初始化为,并且最终将使您放弃。请从空字符串开始

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

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


基本上,在某一点上,无论是在指定任何字符串之前还是之后,您都必须在重用它们之前删除字符串中以前的值。

得到了它,非常感谢。只需声明一个字符串而不初始化它,它就会变成空字符串。我以为它得到了一个垃圾值??字符串不是原始数据类型:int、float、double、char等。String是一个类,可以处理c样式字符串不能处理的异常。因此,如果不初始化String对象,它会将其默认大小计数设置为0,不包含任何字符,并将处理对自身的调用。而c样式字符串是一个字符数组,并且将具有设置为chara的内存无论内存是否初始化,字符都等于它的大小。好的,我理解你所说的每个调用pushback函数??使用字符串。push_back(char)在字符串末尾追加字符。验证旧密码后,您可以尝试创建新密码,方法是在字符串中追加更多字符…您应该分配字符串密码“”或调用密码。clear()在再次附加密码字符串之前。是的,我已经完成了所有这些,谢谢您的帮助,,您能帮我解决另一个问题吗?我正在制作一个购物中心数据库,但不知道如何处理文件。