Я пытаюсь создать функцию, которая устанавливает значения двумерного массива, а затем другую функцию, которая печатает эти значения.
По какой-то причине в моей текущей реализации, если я создаю матрицу 3x3 и устанавливаю каждое значение на число 5, она печатает значения, но печатает их, считая с 5, поэтому печатает 567, 678, 789 , когда вместо этого я хочу напечатать точное значение, которое я установил.
Вот определения функций - что я делаю не так?
Определение структуры:
struct matrix{
char matrixName[50];
int rows;
int columns;
float* data;
};
typedef struct matrix matrix_t;
Создание матрицы:
int create_matrix(matrix_t* matrixP, int matrixLocation){
char tempName[50];
int rows, cols;
printf("Enter a name for your matrix>\n");
scanf("%s", tempName);
printf("Enter the number of rows>\n");
scanf("%d", &rows);
printf("Enter the number of cols>\n");
scanf("%d", &cols);
float * our_matrix = (float *) malloc(rows * cols * sizeof(float));
strcpy(matrixP[matrixLocation].matrixName, tempName);
matrixP[matrixLocation].rows = rows;
matrixP[matrixLocation].columns = cols;
matrixP[matrixLocation].data = our_matrix;
return 0;
}
Заданные значения:
int setValues(matrix_t* our_matrix, int matrix_index) {
int counter = 0;
int row = 0, col = 0;
for (col = 1; col <= our_matrix[matrix_index].columns; col++) {
for (row = 1; row <= our_matrix[matrix_index].rows; row++) {
counter++;
printf("Enter the value for column number %d of row number %d>\n", col, row);
scanf("%f", our_matrix[matrix_index].data+(col-1)+(row-1));
}
/* separate rows by newlines */
}
return 0;
}
Печать:
int printMatrix(matrix_t* our_matrix, int index) {
int row = 0, col = 0;
for (col = 1; col <= our_matrix[index].columns; col++) {
for (row = 1; row <= our_matrix[index].rows; row++) {
printf(" %2.f ", *our_matrix[index].data+(col-1)+(row-1));
}
printf("\n");
}
return 0;
}
Если я вызываю функцию printMatrix()
без предварительного использования setValues, кажется, что она печатает относительную позицию ячейки, которую она печатает, примерно так:
Но когда я звоню setValues()
и устанавливаю все значения на номер 5, его отпечатки отсчитываются от номера 5 следующим образом: