C++ 使用ifstream读取用户数据库文件仅返回最后一行的问题解决
问题根因
你的代码存在的核心问题是:遍历文件匹配到目标用户后没有终止循环,循环会一直读完整个文件所有行,最终存储用户名/密码的变量会被文件最后一行(也就是最新注册用户)的内容覆盖,所以不管匹配到的是哪个用户,最终输出的都是最后一行的内容。
具体修改方法
你只需要在两个case的匹配判断逻辑里,匹配成功后加break终止循环即可,修改后的核心代码段如下:
case1(找回密码)循环部分修改
while(searchUserName >> su >> sp) { if(su == searchUser) { count = 1; break; // 匹配到目标用户后直接终止循环,保留当前sp为对应密码 } }
case2(找回用户名)循环部分修改
while(searchPassword >> su2 >> sp2) { if(sp2 == searchPass) { count = 1; break; // 匹配到目标密码后直接终止循环,保留当前su2为对应用户名 } }
补充注意事项
当前通过密码找回用户名的逻辑存在天然缺陷:如果有多个用户设置了相同的密码,只会返回第一个匹配到的用户的用户名,如果需要处理这种场景,你可以调整逻辑存储所有匹配的用户名再统一输出。
内容的提问来源于stack exchange,提问作者user12062753
相关产品推荐
相关产品推荐

