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

C++如何读取文件内容存入二维数组 运行出现垃圾值如何解决

问题原因

  • 缺少文件打开成功校验:如果p4data1.dat、p4data2.dat不在程序运行的工作目录下,open操作会失败,后续读取逻辑不会修改传入的数组,数组保留初始化前的垃圾值。
  • 缺少读取成功校验:如果传入的rows与columns的乘积大于12(两个数据文件都只有12个有效字符),超出有效字符数的位置不会被赋值,同样会显示垃圾值。
  • 隐藏问题:如果调用fileAndRandom前没有初始化随机数种子,rand()每次运行都会返回固定值,无法实现随机选文件的效果。

修复后代码

// 需提前包含头文件:<fstream> <cstdlib> <ctime>
void fileAndRandom(char letArr[][COLUMN], int rows, int columns) {
    // 调用该函数前请在main函数开头执行srand((unsigned int)time(NULL))初始化随机种子
    int random = rand() % 2 + 1;
    ifstream readFile;
    // 统一初始化数组为默认值,避免部分位置未读到值残留垃圾
    for(int i = 0; i < rows; i++) {
        for(int k = 0; k < columns; k++) {
            letArr[i][k] = '\0';
        }
    }
    // 根据随机值打开对应文件
    if(random == 1) {
        readFile.open("p4data1.dat");
    } else {
        readFile.open("p4data2.dat");
    }
    // 校验文件是否打开成功
    if(!readFile.is_open()) {
        return;
    }
    // 读取内容,每次读取都校验是否读取成功
    for(int i = 0; i < rows; i++) {
        for(int k = 0; k < columns; k++) {
            if(!(readFile >> letArr[i][k])) {
                // 读取失败提前退出,避免无效操作
                break;
            }
        }
    }
    readFile.close();
}

注意事项

  • 请确认传入的rows * columns值等于12,和两个数据文件的有效字符总数匹配
  • 请将p4data1.dat、p4data2.dat放在程序生成的可执行文件同目录下,避免文件打开失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:08