C++从文件读取矩阵实现加减运算报1120错误如何解决?
C++矩阵加减程序1120错误修复方案
首先明确:MSVC报错1120属于「未解析外部符号」类错误,完全由代码错误导致,和编译器异常无关,你的代码存在多类可复现错误,逐一修复即可:
- 变量名拼写错误:你定义的文件流对象名为
result1_file、result2_file,但判断文件打开状态时错误使用了不存在的变量result_file,编译器找不到该变量定义是触发1120报错的直接原因 - 基础语法错误:矩阵加减的两行赋值语句末尾均遗漏了分号
;,会直接触发编译失败 - 文件操作逻辑错误:
- fstream对象构造时传入文件名会自动调用open,后续重复调用open属于多余操作
- 输出运算结果到文件时错误使用了输入运算符
>>,该运算符作用是从文件读取数据到变量,写文件需要使用输出运算符<< - 打开
result2_file时错误指定了文件名result1.txt,会导致减法结果覆盖加法结果文件内容 - 打开结果文件时用
ios::app模式会在原有文件内容后追加结果,如果你需要每次运行生成全新结果,建议改用ios::out模式
修正后的可运行代码
#include <iostream> #include <fstream> using namespace std; int main() { // 直接指定打开模式,避免重复open fstream matrix_file("matricies.txt", ios::in); fstream result1_file("result1.txt", ios::out); fstream result2_file("result2.txt", ios::out); if (!matrix_file) { cout << "矩阵文件打开失败!" << endl; return 1; // 打开失败直接退出,避免后续逻辑出错 } cout << "矩阵文件打开成功!" << endl; if (!result1_file) { cout << "加法结果文件创建失败!" << endl; return 1; } cout << "加法结果文件创建成功!" << endl; if (!result2_file) { cout << "减法结果文件创建失败!" << endl; return 1; } cout << "减法结果文件创建成功!" << endl; int matrix1[9]; int matrix2[9]; int result1Matrix[9]; int result2Matrix[9]; // 读取两个矩阵数据 for (int i = 0; i < 9; ++i) { matrix_file >> matrix1[i]; } for (int i = 0; i < 9; ++i) { matrix_file >> matrix2[i]; } // 矩阵加减运算 for (int i = 0; i < 9; ++i) { result1Matrix[i] = matrix1[i] + matrix2[i]; } for (int i = 0; i < 9; ++i) { result2Matrix[i] = matrix1[i] - matrix2[i]; } // 写入结果到对应文件,3个元素换行模拟3x3矩阵格式 for (int i = 0; i < 9; ++i) { result1_file << result1Matrix[i] << " "; if ((i + 1) % 3 == 0) result1_file << endl; } for (int i = 0; i < 9; ++i) { result2_file << result2Matrix[i] << " "; if ((i + 1) % 3 == 0) result2_file << endl; } matrix_file.close(); result1_file.close(); result2_file.close(); return 0; }
额外注意事项
- 确保
matricies.txt存放在程序运行的工作目录下,文件内按顺序存放18个整数,前9个为第一个3x3矩阵元素,后9个为第二个3x3矩阵元素 - 如果需要处理非固定大小的矩阵,建议改用vector动态存储,避免硬编码数组长度的局限
内容的提问来源于stack exchange,提问作者TheRealMuney
相关产品推荐
相关产品推荐

