C++ C++;-我的密码程序没有更改密码
我已经创建了一个程序,从用户那里获取密码。用户还可以通过将原始密码保存在字符串中,然后将旧密码保存在新字符串中来更改密码,但如果两者都匹配,则用户可以输入新密码,但即使我在新字符串和旧字符串中输入相同的密码,if语句也不会返回true,并且密码不会更改。 第二,当我输入密码并按enter键时,enter也存储在password中。 这是我的密码C++ C++;-我的密码程序没有更改密码,c++,string,passwords,C++,String,Passwords,我已经创建了一个程序,从用户那里获取密码。用户还可以通过将原始密码保存在字符串中,然后将旧密码保存在新字符串中来更改密码,但如果两者都匹配,则用户可以输入新密码,但即使我在新字符串和旧字符串中输入相同的密码,if语句也不会返回true,并且密码不会更改。 第二,当我输入密码并按enter键时,enter也存储在password中。 这是我的密码 void password(int n) { string pass = "0", oldpass = "0"; char ch = '
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()在再次附加密码字符串之前。是的,我已经完成了所有这些,谢谢您的帮助,,您能帮我解决另一个问题吗?我正在制作一个购物中心数据库,但不知道如何处理文件。