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

How do i output sum of rows of a 2D array C++

编辑:我是 c++ 的新手。两周前开始使用这种语言。

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

我需要在 [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 collumns for array"<<endl;
cin>>n;
if (n>10){
    cout<<"More than 10 collumns 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;
}
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];
    }
}

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

您可以将此行替换为:

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

乍一看好像很啰嗦,但你会发现它会让你的问题消失。

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

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

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