C++登录系统仅STL vector首个元素登录成功问题排查
问题根因
你的checkLogin函数存在两处逻辑错误,直接导致只有第一个用户可以登录成功:
- 循环体内只要第一个用户比对不匹配就直接
return false,会直接终止整个函数,不会继续遍历后续的用户数据 - 循环终止条件写的是
i < persoane.size() - 1,会直接跳过vector中存储的最后一个用户,永远不会对最后一个账号做校验
修复方案
直接修改checkLogin函数的逻辑即可,只有遍历完全部用户都找不到匹配项时,才返回登录失败:
bool checkLogin() { savePerson(); string username; string userPassword; Person user; cout << "Specify the name:"; cin >> username; cout << "Specify password:"; cin >> userPassword; user.setNume(username); user.setParola(userPassword); // 修正循环边界,遍历所有用户 for (int i = 0; i < persoane.size(); i++) { if (user.equalTo(persoane.at(i))) { return true; } // 匹配失败不直接返回,继续遍历下一个用户 } // 所有用户遍历完成都没有匹配项,才返回失败 return false; }
如果发现vector存储的用户数据带多余的换行符、空格等不可见字符,可以额外在savePerson解析账号密码的逻辑中,增加对字符串首尾空白字符的过滤,避免因为不可见字符导致比对失败。
内容的提问来源于stack exchange,提问作者AurasCrossCross
相关产品推荐
相关产品推荐

