Я принимаю во входе из текстового файла, который выглядит примерно так:Печать указателя на матрицу без скобок
3
2
4
1 2
3 4
5 6
7 8 9 10
11 12 13 14
С первой строкой представляет собой число строк в матрице А хранится в м, Вторая строка - количество столбцов в матрице A и количество строк в матрице B, хранящихся в n, а третья строка - количество столбцов в матрице B, хранящихся в p.
Я захватывая информации из текстового файла, используя эту функцию:
void read_matrices(int **A, int **B, int **C, int *m, int *n, int *p, char *file) {
FILE *fp = fopen(file, "r");
if (!fp) {
fprintf(stderr, "\n Error: file open failed for file '%s'\n\n", file);
exit(0);
}
/* read & output m, n, p */
fscanf(fp, "%d\n%d\n%d\n", m, n, p);
/* allocate memory for A and set values to null */
*A = (int*)calloc(*m * *n, sizeof(int));
/* read A */
int i, j;
for (i = 0; i < *m; i++) {
fscanf(fp, "\n");
for (j = 0; j < *n; j++) {
fscanf(fp, "%d", (A + i * *n + j));
}
}
/* allocate memory for B and set values null */
*B = (int*)calloc(*n * *p, sizeof(int));
/* read B */
for (i = 0; i < *n; i++) {
fscanf(fp, "\n");
for (j = 0; j < *p; j++) {
fscanf(fp, "%d", (B + i * *p + j));
}
}
/* allocate memory for C and set values null */
*C = (int*)calloc(*m * *p, sizeof(int));
/* close FP & free allocated memory */
fclose(fp);
}
Я печать матрицы с помощью функции:
void print_matrix(int *mtx, int r, int c) {
int i, j;
for (i = 0; i < r; i++) {
printf("\n");
for (j = 0; j < c; j++) {
printf("%5d", (mtx + i * c + j));
}
}
}
Когда я распечатать Матрицы я набираюсь неправильные номера. Но когда я пытаюсь распечатать внутри функции чтения, я получаю правильный результат. Я получаю результат:
Matrix A contents:
8 12
16 20
24 28
Matrix B contents:
7 11 15 19
23 27 31 35
Кроме того, при изменении fscanf (Fp, "% D", (A + I * * N + J)); к fscanf (fp, "% d", * (A + i * * n + j)); Я получаю сообщение об ошибке шины, но, как у меня есть, теперь я получаю предупреждение: int format, pointer arg.
Это также printf ("% 5d", * (mtx + i * c + j)); также? – user3339703
@ user3339703 да, и его отдельная проблема, но также должна быть исправлена. Меня больше интересовало то, что вы писали с неправильным вычислением указателя. – WhozCraig