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

如何打印用户自定义维度与值的数组?程序仅输出最后值求助

嘿,我帮你揪出代码里的几个关键问题啦,咱们一步步来修复:

问题分析

你的代码核心功能是对的,但几个细节错误导致只能输出最后一组值,还可能出现奇怪的计算结果:

  • 数组越界访问:你输入和输出时用了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;
}
关键改动说明
  1. 用vector<vector<int>>替代了非标准的变长数组,这是C++标准中实现动态二维数组的推荐方式,无需手动管理内存,安全性和移植性都更好。
  2. 初始化sum为0,确保累加从正确的起点开始。
  3. 全程用循环变量i和j访问数组元素,彻底解决越界问题,现在可以正确存储和输出所有输入的矩阵值了。
  4. 优化了提示信息,让用户更清楚每一步该输入什么,交互体验更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:35:58