Я знаю, что это очень простой вопрос, но я решал следующее простое упражнение:
my2Darray — это двумерный массив двойников со строками nRows и столбцами nCols. Напишите функцию, которая суммирует все элементы в каждом столбце и возвращает их в виде массива с именем итоги по столбцу. Напишите вторую функцию, которая суммирует все элементы в каждой строке и возвращает их в виде массива с именем totalsByRow.
Мой код теперь работает нормально, но мне было очень любопытно, почему не работает следующая функция:
void colSum (int arrayArg[nRows][nCols]) {
static int sumofCols[nCols] = {};
int rowcount = 0;
for (int i = 0; i < nCols; i++) {
for ( ; rowcount < nRows; rowcount++) {
sumofCols[i] += arrayArg[rowcount][i];
}
cout << sumofCols[i] << endl;
}
}
Почему я не могу создать эту rowcount
переменную вне моих вложенных for
циклов? Только первый столбец из двух строк из массива, который я использовал в качестве аргумента функции, суммировался в sumofCols[0]
, что приводило к тому, что sumofCols[1]
равнялось 0. Когда я устанавливал rowcount
в границах либо первого цикла for
, либо второго , итерация работает так, как задумано.
for (int rowcount = 0; rowcount < nRows; rowcount++)
Это код, который мне пришлось использовать.
Я просто хотел убедиться, что понимаю на 100% то, что делаю, так как C++ может быть довольно запутанным для новичка вроде меня.
О, и я изменил эту функцию, чтобы она возвращала значение int*
, так как я в основном присваиваю sumofCols
другому массиву, как того требует упражнение.
В каждой итерации внешнего цикла for (т. е. при увеличении i
) вам необходимо сбросить rowCount
на 0
Вот в чем проблема, ChrisMM, большое спасибо. Причина, по которой у меня была эта переменная rowcount вне цикла for, в первую очередь заключается в том, что я изначально пробовал использовать цикл while для добавления значений в sumofCols[i], и я предполагаю, что сбрасывал rowCount на 0 не в том месте.
Потому что после первой итерации rowCount будет равен nRows. И для 2-й итерации внешнего цикла он не повторно инициализируется до 0, поэтому код внутри этого цикла for ( ; rowcount < nRows; rowcount++)
не работает. Вы должны сбросить значение rowCount до 0 после итерации внутреннего цикла. Если вы действительно хотите объявить rowCount вне цикла, вы можете сделать следующее:
void colSum (int arrayArg[nRows][nCols]) {
static int sumofCols[nCols] = {};
int rowcount = 0;
for (int i = 0; i < nCols; i++) {
for ( ; rowcount < nRows; rowcount++) {
sumofCols[i] += arrayArg[rowcount][i];
}
cout << sumofCols[i] << endl;
rowCount = 0; // Here we are resetting the value to 0.
}
}
Спасибо, это была очень глупая ошибка, спасибо за ваш ответ.
Где вы инициализируете
rowcount
во время каждой итерации?