2013-09-23 2 views
1

У меня есть задание читать числа из файла, чтобы сформировать матрицу. Первые два целых числа каждой строки - это строка и столбец, а затем остальные целые числа являются данными в матрице.Чтение и печать матрицы C

2 2 1 2 3 4 

выглядит

1 2 
3 4 

Я могу успешно загружать в одну матрицу, используя:

void RdMatrix(FILE *file, int (*matrix)[MAXSIZE][MAXSIZE], int *row, int *column) 
{ 
    int data; 

    int matRow = RdRowSize(file); 
    int matCol = RdColumnSize(file); 
    *row = matRow; 
    *column = matCol; 
    int i, j; 

    for (i = 0; i < matRow; i++) 
    { 
     for (j = 0; j < matCol; j++) 
     { 
      fscanf(file, "%d", &data); 
      *matrix[i][j] = data; 
     } 
} 

Тогда я могу напечатать его с

void PrMat(int(*matrix)[MAXSIZE][MAXSIZE], int row, int col) 
{ 
    int i, j; 
    printf("\n"); 
    for (i = 0; i < row; i++) 
    { 
     for (j = 0; j < col; j++) 
     { 
      printf("%d ", *matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("\n"); 
} 

В моей основной функции, у меня две матрицы A[MAXSIZE][MAXSIZE] и B[MAXSIZE][MAXSIZE], a rowA = 0, colA = 0; и rowB = 0, colB = 0;. я называю RdMatrix(fpin, &A, &rowA, &columnA); RdMatrix(fpin, &B, &rowB, &columnB); PrMat(&A, rowA, columnA);

вход выглядит следующим образом:

2 2 1 2 3 4 
2 2 9 8 7 6 

Затем он печатает

1 2 
9 8 

9 8 
7 6 

Когда следует печатать

1 2 
3 4 

9 8 
7 6 

Я не разрешается использовать какие-либо библиотек и не поможет, так как я должен переписать это позже в сборке.

EDIT: Включая код

#include <stdio.h> 
#define MAXSIZE 10 
FILE *fpin; 

int RdRowSize(FILE *file) 
{ 
    int row; 
    fscanf(file, "%d", &row); 
    return row; 
} 

int RdColumnSize(FILE *file) 
{ 
    int col; 
    fscanf(file, "%d", &col); 
    return col; 
} 

void RdMatrix(FILE *file, int (*matrix)[MAXSIZE][MAXSIZE], int *row, int *column) 
{ 
    int data; 

    int matRow = RdRowSize(file); 
    int matCol = RdColumnSize(file); 
    *row = matRow; 
    *column = matCol; 
    int i, j; 

    printf("\n=====================\nLoading Matrix\n=====================\n"); 
    for (i = 0; i < matRow; i++) 
    { 
     for (j = 0; j < matCol; j++) 
     { 
      fscanf(file, "%d", &data); 
      *matrix[i][j] = data; 
     } 
    } 
} 

void PrMat(int(*matrix)[MAXSIZE][MAXSIZE], int row, int col) 
{ 
    int i, j; 
    printf("\n"); 
    for (i = 0; i < row; i++) 
    { 
     for (j = 0; j < col; j++) 
     { 
      printf("%d ", *matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("\n"); 
} 


int main(void) 
{ 

    int RsizeM, CsizeM;         /*matrix row size and column size*/ 
    int A[MAXSIZE][MAXSIZE], B[MAXSIZE][MAXSIZE];  /*the two matrices*/ 
    int rowA=0, columnA=0, rowB=0, columnB=0;   /* the row and column sizes of A and B */ 




    /*open input file - file name is hardcoded*/ 
    fpin = fopen("INA1.txt", "r");      /* open the file for reading */ 
    if (fpin == NULL) 
    { 
     fprintf(stdout, "Cannot open input file - Bye\n"); 
     return(-1);         /* if problem, exit program*/ 
    } 
    /*ASSUMPTIONS: the file is not empty and contains has at least 1 set of matrices*/ 


    /* Add while loop after testing a single iteration */ 


    RdMatrix(fpin, &A, &rowA, &columnA); 
    RdMatrix(fpin, &B, &rowB, &columnB); 

    PrMat(&A, rowA, columnA); 
    PrMat(&B, rowA, columnB); 



    fclose(fpin); /* close the file */ 

    return (0); 
} 

Затем файл он должен открыть называется INA1.txt

+0

Можете ли вы показать полный код (включая основную функцию)? – SheetJS

+0

Проводка компилируемого кода помогает нам помочь ;-). – leesei

ответ

2

При ссылке на элемент, вы должны использовать (*matrix)[i][j] вместо *matrix[i][j]. Кроме того, при печати матрицы B это должно быть rowB, а не rowA.

+0

Я считаю, что вы правы, но настоящая проблема здесь была просто ошибкой ...;) –

+0

Скобка вокруг матрицы * зафиксировала ее. Строка A/rowB укусила бы меня позже. Спасибо! – Evan

Смежные вопросы