gpt4 book ai didi

C++ 函数运行超过预期

转载 作者:行者123 更新时间:2023-11-28 07:46:29 25 4
gpt4 key购买 nike

当我运行我的程序时,用户可以登录,但如果输入错误的用户名,它会再次运行检查用户名循环,说他们没有输入有效的用户名。除了一件事,这项工作非常好。假设他们尝试登录三次,第三次尝试正确,并提示输入密码。一旦他们输入它,它就会要求输入第二个密码,然后再输入第三个。似乎它正在完成其他尝试的功能。我想不出一种方法来检查这个。有任何想法吗。

如果您查看它,您会发现我正在 getNameIndex 中调用 UserCheck。我几乎可以肯定这是错误发生的地方。

检查用户的函数:

void User_Psw::UserCheck()
{
// read from the database
ifstream fin("dataBase.txt", ios::in);

if( !fin.good() )
{
cout << "Failed to open database file." << endl;
return;
}

while (fin >> username >> password)
{
Usernames.push_back(username);
Password.push_back(password);
++sizeOfDatabase; // This may or may not be needed elsewhere.
}

// rest of the program
cout << "Username: ";
cin >> username;

getNameIndex();

cout << "Password: ";
cin >> password;

if(!PasswordMatches())
{
cout << "Access denied";
}
else
{
cout << "Success! You have logged in.";
}
}

这是用户名校验功能

void User_Psw::getNameIndex()
{
userThere = false;

for(int i=0; i < sizeOfDatabase; i++)
{
if (Usernames[i] == username)
{
index = i;
userThere = true;
}
}
if (userThere == false)
{
cout << "\nThat user name does not exsist. \n";
cout << "Please try again. \n\n";
UserCheck();
}
}

最佳答案

你的程序结构是错误的。

不要让 getNameIndex 再次调用 UserCheck(),您应该让 getNameIndex 返回一个 bool 值 - 成功时为 true,失败时为 false。在一个循环中运行它,像这样:

bool success = false;

while (!success)
{
cout << "Username: ";
cin >> username;

success = getNameIndex();
}

此外,您不应使用全局变量,而应将它们传递给函数。像这样的东西:

成功 = getNameIndex(用户名);

getNameIndex() 不应执行任何 I/O - 调用 getNameIndex() 的函数还应负责打印错误消息。想象一下,如果您在不同的上下文中使用 getNameIndex(),例如当程序正在由另一个程序运行或以自动方式运行时 - 那么打印到控制台将毫无意义。

关于C++ 函数运行超过预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com