2013-09-23 108 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]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 

我不能使用任何圖書館,也不會有幫助,因爲我不得不在晚些時候重新編寫這個程序。

編輯:包括代碼

#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

圍繞*矩陣的圓括號固定它。 rowA/rowB稍後會咬傷我。謝謝! – Evan