【发布时间】:2017-03-30 12:47:43
【问题描述】:
如果 userList[i].CheckUser(username, password) 返回 false 然后它进入 else 条件,我得到输出“用户不存在!再试一次输入用户名和密码”,然后该行陷入无限循环我不知道为什么,我的意思是程序再次重新进入 do-while 循环,所以我看不到循环将如何继续?
int main()
{
LoadUsersFromDatabase();
bool flag;
string username;
int password;
do{
cout << "Enter username and password: ";
cin >> username >> password;
for (int i = 0; i < numOfUsers; i++)
if (userList[i].CheckUser(username, password) == true)
{
if (userList[i].GetUserType() == 'A')
{
ProcessAssistantMenu();
}
else if (userList[i].GetUserType() == 'M')
{
ProcessManagerMenu();
}
}
else
cout << "\rUser Does Not Exist! Try Again! ";
flag = false;
} while(flag == false);
return 0;
}
【问题讨论】:
-
未初始化的局部变量将具有 indeterminate 值。在 C++ 中使用未初始化的局部变量将导致未定义的行为。幸运的是,您的
flag变量从未未初始化,因为您始终无条件地将其设置为false。 -
@mch:我刚刚回滚了您的编辑 - 糟糕的格式(以及缺少大括号)实际上是用户代码问题的一部分,因此修复它会掩盖解决方案。
-
@Dean:请不要即时修复您的代码 - 它会使现有答案无效,并且会让未来的读者感到困惑。
-
对不起,我把它改回来了,问题是我添加了大括号并将标志变量设置为true,但仍然有同样的错误
-
我刚刚注意到的另一件事:你在哪里设置
numOfUsers?
标签: c++ infinite-loop do-while