好的,所以我正在编写用于确认用户名和密码的代码。我使用链接列表保存信息,并提示用户输入代码应确认的用户名和密码。
老实说,我不知道这段代码出了什么问题
输入正确的用户名或密码后,效果很好。
但是,如果第一次输入错误,然后我输入正确的信息,则代码会确认其正确,然后再次要求输入正确的密码。
bool List::enterConfirmation(string username, string password, int check)
{
string userName;
bool a;
while (check <= 3)
{
ADMINNODEPTR p, q;
for (q = 0, p = listPtr; p != 0 && p->username != username; q = p, p = p->next);
if (p == 0)
{
cout << "\tInvalid Username. Try again\n\tUsername: ";
cin >> userName;
check++;
enterConfirmation(userName, password, check);
}
if (p != 0)
{
a = confirmAdmin(p, password, 0);
}
if (a == true)
{
return true;
}
else
return false;
}
cout << "You have exceeded your limit of tries." << endl;
return false;
}
bool List::confirmAdmin(ADMINNODEPTR p, string password, int check)
{
string passWord;
while (check <= 3 && check != -1)
{
if (p->passsword == password)
{
cout << "Identification Confirmed" << endl;
check = -1;
return true;
}
else
{
cin.ignore();
cout << "\tERROR: Incorrect Password. Please Try Again\n\tPassword: ";
getline(cin, passWord);
if (check < 3)
{
confirmAdmin(p, passWord, check);
/*return false;*/
}
if (check > 3)
{
cout << "You have exceeded your limit of tries." << endl;
return false;
}
}
}
}
我本来使代码更短,更整洁并且使用一个函数,但是该函数不会退出(即使在我返回值的地方)这一事实使我发疯。如果可以的话请帮忙。
谢谢
答案 0 :(得分:0)
bool a;
a
未初始化。如果输入在使用前未通过验证,则不会初始化。仅在提供正确输入的情况下,才能通过调用confirmAdmin()
对其进行初始化。
a
最终没有被初始化就被使用。未定义的行为。
confirmAdmin()
中还有一些执行路径未从该函数返回值,因此即使在这种情况下,a
仍可能未初始化。更加不确定的行为。