我创建了一个从用户那里获取密码的程序。用户也可以通过将原始密码保存在字符串中然后将旧密码保存在新字符串中来更改密码,但如果两者都匹配,则用户可以输入新密码,但即使我在新旧字符串中输入相同的密码,也可以语句未返回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 :(得分:0)
Enter不会存储在您的密码中。
&#34; 0&#34;的默认初始化是,并且最终将把你抛弃。从空字符串开始。
此外,您永远不会重置任一密码的值,两者都使用string.push_back(char)附加每个调用。并且请记住,函数中的变量不会持久存在,因此函数之后的每次调用都会将变量默认为其初始化值。
一个好的调试方法是在提示输入旧密码时显示两个字符串的值;你会看到对函数的每次调用都默认两个字符串为&#34; 0&#34;,如果你在函数中使用循环,每个循环都会在字符串上附加更多的字符而不是覆盖带有你期待的字符串的字符串。
基本上,在任何一个字符串的赋值之前或之后的某个时刻,你必须先删除字符串中的先前值,然后重新使用它们。