我如何输出二维数组C++的行总和

问题描述 投票:0回答:2

编辑:我对 C++ 相当陌生。两周前开始使用这种语言。

很抱歉,如果之前有人问过这个问题,但我已经在网上到处搜索了如何对二维数组中的各个行求和,但没有找到我正在寻找的答案。

我需要显示 a[m][n] 中每一行的总和,但由于某种原因,这只在我的数组为 2x2 时才有效,但如果它是 3x3 或更大,那么我在终端中得到以下输出:

for intsance, a[3][3]= 
{1,2,3},   //this is determined by the user
{1,2,3},
{1,2,3};
 
then i get the following output:
9179942 //address of some sort???
6       // actual sum. code is working here (yay :D)
469090925// again something i dont understand

这就是我目前所拥有的

#include <iostream>
using namespace std;
int main(){
int m,n;
cout<<"Enter number of rows for array"<<endl;
cin>>m;
if (m>10){
    cout<<"More than 10 rows will be too big"<<endl;
    return 1;   
} 
cout<<"Enter number of columns for array"<<endl;
cin>>n;
if (n>10){
    cout<<"More than 10 columns will be too big"<<endl;
    return 1;
} 
int a[m][n];
for(int i=0; i<m;i++){
    cout<<"Enter "<<m<<" values into row "<<i+1<<endl;
    for(int j=0; j<n; j++){
        cout<<"a ["<<i<<"]["<<j<<"]: ";
        cin>>a[i][j];
    }
}
cout<<"Array dimensions: "<<m<<"x"<<n<<'\n'<<"resulting array: "<<endl;
for(int i=0; i<m;i++){
    for(int j=0; j<n; j++){
        cout<<a[i][j]<<"    ";
    }
    cout<<endl;
}
int avg[m];
int el_less_avg;
for(int i=0; i<m; i++){
    for(int j=0; j<n;j++){
        avg[i]+=a[i][j];
    }
}cout<<"\n\n";
for(int i=0; i<m; i++){
    
    cout<<avg[i]<<endl;
}

return 0;
}
c++ arrays multidimensional-array revision
2个回答
1
投票
int avg[m];
int el_less_avg;
for(int i=0; i<m; i++){
    for(int j=0; j<n;j++){

您没有初始化这些值,因此它们可以自由地成为当时堆栈上的任何内容。您需要初始化它们。

int avg[m];
for (int i = 0; i < m; ++i) {
    avg[i] = 0;
    for (int j = 0; j < n; ++j) {
        avg[i] += a[i][j];
    }
}

1
投票
标准 C++ 中不允许使用

int a[m][n];
。 C 风格数组的维度必须在编译时已知。使用此代码的程序几乎可以做任何事情。

您可以将此行替换为:

vector<vector<int>> a(m, vector<int>(n));

乍一看似乎有点拗口,但你会发现它会让你的问题消失。

这种方法的另一个好处是您可以使用基于范围的循环:

for(int x : avg)
    cout << x << endl;

这减少了在循环条件中使用错误字母而出错的机会。

© www.soinside.com 2019 - 2024. All rights reserved.