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

C++新手:文件逐行读取存变量遇getline报错求解决

问题解决与逻辑确认

错误原因及修复

你遇到的getline错误,核心是同一作用域内重复定义了同名变量file:

  • 先定义ofstream file用于写入文件,后续又定义ifstream file,编译器不允许同一作用域存在同名变量,导致getline调用时实际使用的是前面的ofstream对象,而getline仅接受输入流(istream类型,如ifstream),因此触发类型不匹配错误。

修复后的代码

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{   
    cout << "  Create an Account\n\n";
    cout << "Enter a username: ";
    string newUsername;
    cin >> newUsername;
   
    cout << "Enter a password: ";
    string newPassword;
    cin >> newPassword;

    // 用不同变量名区分写入/读取流
    ofstream out_file("user_list.txt");
    if (out_file.is_open()) {
        out_file << newUsername << "\n" << newPassword << "\n" << "true";
        out_file.close(); // 写入后关闭,确保数据写入磁盘
    } else {
        cout << "Failed to open file for writing." << endl;
        return 1;
    }

    ifstream in_file("user_list.txt");
    if (!in_file.is_open()) {
        cout << "Failed to open file for reading." << endl;
        return 1;
    }

    string username;
    string password;
    string trueOrFalse;

    while (getline(in_file, username)
        && getline(in_file, password)
        && getline(in_file, trueOrFalse))
    {
        cout << username << " has the password " << password
            << " and mystery item " << trueOrFalse << endl;
    }
    
    in_file.close();
    return 0;
}

逐行读取逻辑的可行性确认

你当前的逐行读取逻辑是可行的:

  • 每次循环读取三行内容,分别对应用户名、密码、状态字段,只要文件中用户信息严格遵循「每行一个字段,每三行一组」的存储格式,就能正确将内容存入对应变量。
  • 若后续要存储多个用户,写入时需保持相同的三行一组格式,读取逻辑才能正常工作。

额外注意事项

  • 操作文件时务必检查流是否成功打开,避免因权限、路径错误导致隐性问题。
  • 若需要支持含空格的用户名/密码,建议改用getline(cin, newUsername)(注意先处理cin留下的换行符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:07:03