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

尝试将.txt文件文本导入字符串二维数组失败,寻求解决方案

问题分析与修正代码

原代码存在的问题

  • 循环逻辑错误:外层while(!file.eof())会重复执行内层38行读取循环,导致数据被多次覆盖;且eof()的判断时机不符合C++文件读取逻辑,应在读取操作后判断是否成功。
  • 分隔符使用不当:每行第三个元素后是换行符而非逗号,用逗号作为第三列的读取分隔符时,会将下一行内容一并读入,造成数据错乱。
  • 缺少文件打开校验:未检查文件是否成功打开,若文件路径错误或不存在,后续读取操作会直接失败。

修正后的代码

// 仅允许使用这些库
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
    const int rows = 38;
    const int columns = 3;
    string companies[rows][columns];

    // 读取文件内容
    ifstream file;
    file.open("companies.txt");

    // 检查文件是否成功打开
    if (!file.is_open()) {
        cout << "无法打开文件!" << endl;
        return 1;
    }

    // 逐行读取并分割数据
    for(int i = 0; i < rows; ++i)
    {
        // 先读取整行,避免换行符干扰
        string line;
        if (!getline(file, line)) {
            // 如果提前读完文件,跳出循环
            break;
        }

        size_t pos = 0;
        for(int j = 0; j < columns; ++j)
        {
            size_t next_pos = line.find(',', pos);
            // 处理最后一列(没有后续逗号)
            if (j == columns - 1) {
                companies[i][j] = line.substr(pos);
            } else {
                companies[i][j] = line.substr(pos, next_pos - pos);
                pos = next_pos + 1;
            }
        }
    }
    
    file.close();   
    
    cout << endl << endl;
    
    // 显示读取的内容
    for(int i = 0; i < rows; ++i)
    {
        // 跳过空行(如果文件行数不足38行)
        if (companies[i][0].empty()) {
            continue;
        }
        for(int j = 0; j < columns; ++j)
        {
            cout << companies[i][j] << endl << endl;
        }
    }
    
    cout << endl << endl;

    return 0;               
}

修正说明

  1. 增加文件打开校验:通过file.is_open()判断文件是否成功打开,避免无效读取。
  2. 逐行读取+手动分割:先读取整行文本,再通过string::find和string::substr手动分割每行的三个元素,完美处理最后一列无逗号的情况。
  3. 修正循环逻辑:去掉多余的while(!file.eof())循环,直接用for循环读取指定行数,同时增加读取失败的判断,避免读取空数据。
  4. 空行过滤:在显示数据时跳过空行,避免文件行数不足38行时输出空内容。

内容的提问来源于stack exchange,提问作者Mr Moon Knight

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:51:02