Как подсказывает @ user4581301, ваша проблема в printAndThenFindMinMaxSum
. Простое изменение на приведенное ниже решает вашу проблему:
void printAndThenFindMinMaxSum(int **A, int &maxPtr, int &minPtr, int &sumPtr) { // COMPLETE THIS FUNCTION
maxPtr = INT_MIN;
minPtr = INT_MAX;
sumPtr = 0;
.
.
.
sumPtr += A[i][j];
if (A[i][j] > maxPtr)
maxPtr = A[i][j];
if (A[i][j] < minPtr)
minPtr = A[i][j];
}
}
}
Нам также нужно изменить readComputeWrite
на:
void readComputeWrite() {
int max, min, sum;
int **A = createAndReturnJaggedArray();
cout << "*** Jagged Array ***" << endl;
printAndThenFindMinMaxSum(A, max, min, sum);
print(max, min, sum);
}
Я бы также рекомендовал изменить имена minPtr
, maxPtr
и sumPtr
на что-то более подходящее, так как они не являются указателями в этой точке и представляют примитивные значения.
Вы заметите, что я изменил указатели на ссылки, так как это более естественная адаптация для этого типа операций. По сути, передача по ссылке позволяет пользователю работать с переданным значением простым способом, без утомительной задачи убедиться, что вы разыменовали вещи в соответствующее время. Это также позволяет работать менее подверженным ошибкам образом.
Опять же, как проницательно указывает @ user4581301, целью этого назначения было, вероятно, иметь дело с указателями. Таким образом, есть несколько вещей, которые необходимо изменить, если OP не может использовать ссылки. Обратите внимание:
void printAndThenFindMinMaxSum(int **A, int *maxPtr, int *minPtr, int *sumPtr) { // COMPLETE THIS FUNCTION
*maxPtr = INT_MIN; // Make sure to deference before assigning
*minPtr = INT_MAX; // Make sure to deference before assigning
*sumPtr = 0; // Make sure to deference before assigning
for(int i=0;i<numRows;i++){
for(int j=0;j<numColumnsInEachRow[i];j++){
//1. print array
if (j == (numColumnsInEachRow[i]-1))
cout << A[i][j] << endl;
else
cout << A[i][j] << " ";
//2. compute max, min, and sum
*sumPtr += A[i][j]; // Make sure to deference before assigning
if (A[i][j] > *maxPtr) // Make sure to deference before comparing
*maxPtr = A[i][j]; // Make sure to deference before assigning
if (A[i][j] < *minPtr) // Make sure to deference before comparing
*minPtr = A[i][j]; // Make sure to deference before assigning
}
}
}
И readComputeWrite
может остаться неизменным после первоначальной попытки ОП.
В коде ОП они в основном забывают о необходимости почтения перед назначением / сравнением.