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

C++从文件读取矩阵后打印为空白屏幕的问题求助

问题根因及修复方案

导致打印空白的核心原因

你写入文件时没有提前写入矩阵的行列值n和m,读取阶段执行fin >> n >> m时,会读取文件开头的两个0作为新的n、m值,此时n和m都被赋值为0,后续的矩阵读取循环、打印循环的终止条件为i < n、j < m,循环完全不执行,自然没有任何输出。

其他存在的逻辑问题

  • 写入矩阵时所有数字直接拼接无分隔符,且你写的cout << endl是把换行输出到控制台而非写入文件,最终文件内容是连续100个0的字符串,格式不规范容易引发读取异常。
  • 文件打开失败后仅打印错误信息,没有终止程序,后续无效逻辑还会继续执行。
  • 代码使用了errno但没有引入对应的<cerrno>头文件,部分编译器会报错。

修正后可正常运行的代码

#include <iostream>
#include <fstream>
#include <cstring>
#include <cerrno>
using namespace std;

int main()
{
    int n = 10;
    int m = 10;

    int arr[10][10];
    int arr1[10][10];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            arr[i][j] = 0;
        }

    ofstream fout;
    fout.open("array.txt");
    // 先写入行列值
    fout << n << " " << m << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            // 数字之间加空格分隔
            fout << arr[i][j] << " ";
        }
        // 每行写完写入换行到文件
        fout << endl;
    }
    fout.close();

    ifstream fin;
    fin.open("array.txt");
    if (!fin)
    {
        cerr << strerror(errno) << "\n";
        // 打开失败直接退出
        return 1;
    }

    fin >> n >> m;
    // 增加边界判断避免数组越界
    if(n > 10 || m >10) {
        cerr << "矩阵尺寸超出数组最大限制" << endl;
        return 1;
    }

    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            fin >> arr1[i][j];
        }

    fin.close();

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << arr1[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 03:24:00