Когда я добавляю матрицы, мой добавленный вывод матрицы просто нули вместо добавленных чисел. Мой инструктор говорит, что проблема может заключаться в том, что я передал сумму в виде двойного указателя вместо тройного указателя для ее обновления, но я не знаю, как ее исправить. Что я делаю, чтобы суммы матричных чисел выходили вместо нулей?Почему не добавляются мои матрицы?
#include <stdio.h>
#include <stdlib.h>
int** make_matrixA(int num_rows, int num_cols){
int** matrixA;
int row, col;
int userNum;
matrixA = (int**)malloc(num_rows * sizeof(int*));
for(row = 0; row < num_rows; ++row){
matrixA[row] = (int*)malloc(num_cols * sizeof(int));
}
for(row = 0; row < num_rows; ++row){
for(col = 0; col < num_cols; ++col){
scanf("%d", &userNum);
}
}
return matrixA;
}
int** make_matrixB(int num_rows, int num_cols){
int** matrixB;
int row, col;
int userNum;
matrixB = (int**)malloc(num_rows * sizeof(int*));
for(row = 0; row < num_rows; ++row){
matrixB[row] = (int*)malloc(num_cols * sizeof(int));
}
for(row = 0; row < num_rows; ++row){
for(col = 0; col < num_cols; ++col){
scanf("%d", &userNum);
}
}
return matrixB;
}
int** make_matrixC(int num_rows, int num_cols){
int** matrixC;
int row;
matrixC = (int**)malloc(num_rows * sizeof(int*));
for(row = 0; row < num_rows; ++row){
matrixC[row] = (int*)malloc(num_cols * sizeof(int));
}
return matrixC;
}
int** add_matrix(int num_rows, int num_cols, int** matrixA, int** matrixB, int** matrixC){
int row, col;
for(row = 0; row < num_rows; ++row){
for(col = 0; col < num_cols; ++col){
matrixC[row][col] = matrixA[row][col] + matrixB[row][col];
}
}
return matrixC;
}
void print_matrix(int num_rows, int num_cols,int** matrixA, int** matrixB, int** matrixC){
int row, col;
printf("A + B = \n");
for(row = 0; row < num_rows; ++row){
for(col = 0; col < num_cols; ++col){
matrixC[row][col] = matrixA[row][col] + matrixB[row][col];
printf("%d ", matrixC[row][col]);
}
printf("\n");
}
}
void delete_matrixA(int num_rows, int** matrixA){
int row;
for(row = 0; row < num_rows; ++row){
free(matrixA[row]);
}
free(matrixA);
}
void delete_matrixB(int num_rows, int** matrixB){
int row;
for(row = 0; row < num_rows; ++row){
free(matrixB[row]);
}
free(matrixB);
}
void delete_matrixC(int num_rows, int** matrixC){
int row;
for(row = 0; row < num_rows; ++row){
free(matrixC[row]);
}
free(matrixC);
}
int main(){
int num_rows, num_cols;
int** matrixA;
int** matrixB;
int** matrixC;
//get input
printf("Please enter the number of rows: ");
scanf("%d", &num_rows);
printf("Please enter the number of columns: ");
scanf("%d", &num_cols);
//make matrix A
printf("Enter Matrix A\n");
matrixA = make_matrixA(num_rows, num_cols);
//make matrix B
printf("Enter Matrix B\n");
matrixB = make_matrixB(num_rows, num_cols);
//add the matrices
matrixC = make_matrixC(num_rows, num_cols);
matrixC = add_matrix(num_rows, num_cols, matrixA, matrixB, matrixC);
//print the matrix
print_matrix(num_rows, num_cols, matrixA, matrixB, matrixC);
//delete the matrices
delete_matrixA(num_rows, matrixA);
delete_matrixB(num_rows, matrixB);
delete_matrixC(num_rows, matrixC);
return 0;
}
Просто комментарии: почему у вас есть 'make_matrixA' и' make_matrixB', когда код идентичен? Зачем возвращать что-либо из 'add_matrix', когда вы уже указываете в' matrixC', который будет иметь значения? Почему 'print_matrix' также вычисляет суммы, а не только печатает? Что касается проблемы, что вы узнали, отлаживая функцию 'add_matrix'? –
Ваш инструктор должен был сказать вам использовать 2D-массивы aka matrices, и что трехмерный программист C не является комплиментом. Проливает плохой свет. Нет ничего похожего на 2D-массив/матрицу и не может содержать один в вашем коде. – Olaf
Вы действительно должны попытаться обобщить свои функции немного больше ... например, одна функция для выделения матрицы, одна функция для ввода значений и т. Д. Кроме того, вам не нужно передавать * все * матрицы каждой функции , только тот, который функция будет использовать. И почему вы добавляете матрицы внутри своей функции печати, когда вы уже добавили их в свою функцию добавления? – Dmitri