Я пробовал этот код, и он работает не очень хорошо.
void *matrix_allocate_variable (int size)
{
void *p1;
if ((p1=(int*)malloc(size))==NULL){
printf("out of memory.\n");
exit(1);
}
return p1;
}
Здесь я создал функцию, которая вызывает malloc
и закрывается при ошибке, чтобы я мог использовать ее в своей следующей функции:
void matrix_new(int **matrices, int *row_counts, int *column_counts, char specifier)
{
int index, i;
index= (int)(specifier-'A');
scanf("%d",&row_counts[index]);
scanf("%d",&column_counts[index]);
matrices[index]= (int*)matrix__allocate_variable(sizeof(int)* (row_counts[index]*column_counts[index]);
Вот где у меня проблемы. Я пытаюсь, чтобы пользователь ввел некоторые данные для создания матрицы, но у меня много проблем, пытаясь заставить это работать. Может ли кто-нибудь помочь мне начать это?
PS. Для более подробной информации, я создаю функции в functions.c
, это то, что я до сих пор. У меня есть main.c
, который вызывает эти функции, чтобы позже я мог добавлять, вычитать и транспонировать, но сейчас я пытаюсь ввести данные, с которыми у меня много проблем. Вот мой main.c
, где я вызываю функции.
/* Pointer to the set of matrix registers. */
int **matrices = NULL;
/* row_counts[i] stores the number of rows in matrix i */
int *row_counts = NULL;
/* column_counts[i] stores the number of columns in matrix i */
int *column_counts = NULL;
/**********************************************************************
Skeleton code part B: suggested form for selected variable initializations
**********************************************************************/
/* Initialize the matrix set. */
matrices = (int**) matrix_allocate_variable(...);
column_counts = (int *)matrix_allocate_variable(...);
row_counts = (int *)matrix_allocate_variable(...);
char call[2];
int error = 2;
do {
printf ( "> ");
if (scanf ("%1s", call) !=1) {
fprintf (stderr, "Command not found. \n");
exit (1);
}
switch (call [0]) {
case 'A': matrix_new(matrices,row_counts,column_counts,'A');
break;
case 'B': matrix_new(matrices,row_counts,column_counts,'B');
break;
case 'C': matrix_new(matrices,row_counts,column_counts,'C');
break;
case 'D': matrix_new(matrices,row_counts,column_counts,'D');
break;
case '+': matrix_add(matrices,row_counts,column_counts);
break;
case '^': matrix_tranpose(matrices,row_counts,column_counts);
break;
case '*': matrix_multiply(matrices,row_counts,column_counts);
break;
case '$': exit (1);
default : fprintf (stderr, "Command not found. \n");
}
} while (error != 1);
return 0;
}
Любая помощь будет хорошей, и любые указатели на то, что я должен делать дальше, также хороши. Огромное спасибо всем.