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
相关产品推荐
相关产品推荐

