如何打印用户自定义维度与值的数组?程序仅输出最后值求助
嘿,我帮你揪出代码里的几个关键问题啦,咱们一步步来修复:
问题分析
你的代码核心功能是对的,但几个细节错误导致只能输出最后一组值,还可能出现奇怪的计算结果:
- 数组越界访问:你输入和输出时用了
matrix[r][c],但数组下标是从0开始的,r和c是数组的总行数/列数,这个下标已经超出数组范围了,应该用循环变量i和j来访问对应位置的元素matrix[i][j]。 - 未初始化的累加变量:
sum没有初始化为0,直接累加会得到随机垃圾值,完全没法得到正确的总和。 - 非标准变长数组:
int matrix[r][c];这种用变量定义数组大小的写法不是标准C++特性(仅部分编译器作为扩展支持),移植性很差,建议用标准的动态容器实现。
修正后的代码
#include <iostream> #include <vector> // 引入标准动态容器头文件 using namespace std; int main(){ int r, c; int sum = 0; // 初始化累加变量为0,避免垃圾值 cout << "Let's create a matrix!\n"; cout << "Enter number of ROWS: "; cin >> r; cout << "Enter number of COLUMNS: "; cin >> c; // 用vector创建标准的动态二维数组,自动管理内存 vector<vector<int>> matrix(r, vector<int>(c)); cout << "Enter the values of the " << r << " X " << c << " matrix (row by row): \n"; // 循环输入矩阵元素 for(int i = 0; i < r; i++){ cout << "Enter elements for row " << i+1 << ": "; for(int j = 0; j < c; j++){ cin >> matrix[i][j]; // 用正确的下标访问数组元素 sum += matrix[i][j]; // 累加当前元素值 } cout << "\n"; } // 输出完整矩阵 cout << "\nYour " << r << " X " << c << " matrix is:\n"; for(int i = 0; i < r; i++){ for(int j = 0; j < c; j++){ cout << matrix[i][j] << " "; // 正确遍历输出每个元素 } cout << "\n"; } cout << "\nThe sum of all elements is: " << sum; return 0; }
关键改动说明
- 用
vector<vector<int>>替代了非标准的变长数组,这是C++标准中实现动态二维数组的推荐方式,无需手动管理内存,安全性和移植性都更好。 - 初始化
sum为0,确保累加从正确的起点开始。 - 全程用循环变量
i和j访问数组元素,彻底解决越界问题,现在可以正确存储和输出所有输入的矩阵值了。 - 优化了提示信息,让用户更清楚每一步该输入什么,交互体验更友好。
内容的提问来源于stack exchange,提问作者victor kuchiki
相关产品推荐
相关产品推荐

