РЕДАКТИРОВАТЬ: я довольно плохо знаком с C ++. Начал работать с этим языком две недели назад.
Извините, если раньше об этом спрашивали, но я искал повсюду в Интернете, как суммировать отдельные строки в двумерном массиве, и не нашел ответа, который искал.
Мне нужно отобразить сумму каждой отдельной строки в [m] [n], но по какой-то причине это работает только тогда, когда мой массив 2×2, но если он 3×3 или больше, то я получаю следующий вывод в терминале:
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;
что уменьшает вероятность ошибки при использовании неправильной буквы в условии цикла.