Помогите с условиями и циклами на Си
Делал прогу, в которой нужно создать два массива-матрицы n на n с динамической памятью. С этим все ок. После этого нужно было сделать функцию, которая определяет +, - или * и сделать соответствующие вычисления для матриц. После задания условия - все ок, но после начала цикла for код отказывается работать. В чем может быть проблема?
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
double** new_matrix(int n){
int i;
double** matrix = calloc(n, sizeof(double*));
for(i = 0; i < n; i++){
matrix[i] = calloc(n, sizeof(double));
}
return matrix;
}
void input(int n, double **mat){
int i, j;
for(i = 0; i<n; i++){
for(j =0; j<n; j++){
printf("input matrix[%d][%d]", i+1, j+1);
scanf("%lf", &mat[i][j]);
}
}
}
void print_mat(int n, double **mat){
int i, j;
for(i = 0; i<n; i++){
for(j =0; j<n; j++){
printf("%lf\t", mat[i][j]);
}
printf("\n");
}
}
double** calculat_mat(int n, double **mat1, double **mat2){
double **res = new_matrix(n);
char c;
printf("+, -, or *? \n");
scanf("%s", &c);
if (c == '+'){
for (int i=0; i < n; i++){
for(int j = 0; j<n; j++){
res[i][j] = mat1[i][j]+mat2[i][j];
}
}
return res;
}
else if (c == '-'){
for (int i=0; i < n; i++){
for(int j = 0; j<n; j++){
res[i][j] = mat1[i][j]-mat2[i][j];
}
}
return res;
}
else if (c == '*'){
for (int i=0; i < n; i++){
for(int j = 0; j<n; j++){
res[i][j] = 0;
for(int p=0; p<n; p++){
res[i][j] += mat1[i][p]*mat2[p][j];
}
}
}
return res;
}
else{
return res;
}
}
int main() {
int n;
char c;
printf("Write size of matrix: \n");
scanf("%d", &n);
double **mat1 = new_matrix(n);
double **mat2 = new_matrix(n);
double **res = new_matrix(n);
printf("Input matrix number 1: \n");
input(n, mat1);
printf("Input matrix number 2: \n");
input(n, mat2);
res = calculat_mat(n, mat1, mat2);
print_mat(n, res);
return 0;
}
Если код вам кажется кривым - сорян, я только начал учить Си.
Источник: Stack Overflow на русском