You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用文本文件存储用户数据时登录功能仅同次运行注册后可用

问题根因

你的登录逻辑存在核心设计错误,直接使用未初始化的全局变量拼接校验字符串,导致程序重启后无法匹配文件中已存储的账号数据:

  • 全局变量admin、status仅在注册函数createAcc中被赋值,程序重启后直接执行登录时,这两个变量是未初始化的随机值,拼接出来的userPass和文件内存储的真实数据完全不匹配,自然会提示账号密码错误。
  • 你当前的校验逻辑完全不合理:登录时应该逐行读取文件内容,拆分每行的用户名、角色、密码、状态四个字段,先匹配输入的用户名,再对比对应行的密码是否正确,最后判断账号状态是否可用,而不是提前拼接固定字符串去匹配整行。
修复方案

修改loginAcc函数的校验逻辑,读取文件后拆分每行字段做对应校验,修改后的代码如下:

void loginAcc()
{   
    cout << "\n\n";
    cout << "=================================" << endl;
    cout << setw(25) << "USER LOGIN" << endl; 
    cout << "=================================" << endl;
    cout << "Enter Username : " << endl;
    cin >> inputusername;

    cout << "Enter Password : " << endl;
    cin >> inputpassword;

    string line;
    ifstream userData;
    userData.open("userdata.txt");

    bool found = false;
    char fileAdmin, fileStatus;
    string fileUsername, filePassword;
    if(userData.is_open())
    {
        while(userData >> fileUsername >> fileAdmin >> filePassword >> fileStatus && !found)
        {
            // 先匹配用户名和密码
            if (fileUsername == inputusername && filePassword == inputpassword)
            {
                found = true;
                // 匹配成功后给全局变量赋值
                admin = fileAdmin;
                status = fileStatus;
            }
        }
        userData.close();
        if(found){
            if(status == 'b')
            {
                cout << endl << "User deleted by admin" << endl;
                login = false;
            }
            else{
                login = true;
                administrator = (admin == 'a');
                cout << "Successfully Logged In!" << endl;
            }
        }
        else{
            cout << endl << "Username or Password is Incorrect" << endl;
        }
    }
}
额外优化建议
  • 注册时可以先判断用户名是否已存在,避免重复注册相同账号
  • 全局变量尽量减少使用,可以把用户信息封装为结构体传递,避免变量污染导致的逻辑错误

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:07