2010-11-21 85 views
0

如何讀取使用FILE * fp在C中保存的矩陣?讀取文件的問題

int main() 
{ 
    int i,j; 
    FILE *fp; 
    int **mat; //matriz de cartas apartir do arquivo 
    int n; //numero de jogadores 
    mat=(char**)malloc(3*sizeof(char*)); 
    for(i=0;i<2;i++){ 
     mat[i]=(char*)malloc(3*sizeof(char)); 
     if(!mat){ 
      printf("erro de alocacao\n"); 
      exit(1); 
     } 
    } 

    fp=fopen("arquivo","r"); //this is the file to read 
    if(fp==NULL){ 
     printf("erro de abertura de ficheiro\n"); 
     exit(1); 

    } 
    for(i=0;i<3;i++){ 
     for(j=0;j<3;j++){ 
      fscanf(fp,"%d",&mat[i][j]); 
     } 
     printf("%d\n",mat[i][j]); //problem here 
    } 
    return 0; 
} 

這是矩陣我想讀:

1 2 9 
3 6 7 
4 9 5 
+1

你是否想提一提你遇到的問題? – 2010-11-21 15:18:03

+0

你會得到什麼輸出? – rtpg 2010-11-21 15:18:53

回答

2

考慮

for(i=0;i<3;i++){ 
    for(j=0;j<3;j++){ 
     fscanf(fp,"%d",&mat[i][j]); 
} 
printf("%d\n",mat[i][j]); //problem here 

之中:

for(i=0;i<3;i++){ 
    for(j=0;j<3;j++){ 
     fscanf(fp,"%d",&mat[i][j]); 
     printf("%d ",mat[i][j]); 
    }  
    printf("\n"); 
} 

你貼什麼的數組邊界之外打印

+0

即使我認爲這是問題。問題沒有明確定義。 – prap19 2010-11-21 15:29:21

1

您正在嘗試將整數讀入分配給字符的空間 - 當您需要使用int時,您的malloc()操作的計算方式爲sizeof(char *)sizeof(char)。這將導致問題。

您應該檢查您的打印件與掃描相關的位置;目前,您嘗試僅打印每行數據中的最後一個數字,但您需要考慮打印出現時j的值。

您應該也可能從scanf()檢查退貨狀態以確保數據有效。你也許應該關閉輸入文件;儘管此時程序立即退出,但「獲得的資源釋放」是一個很好的學科。同樣的評論也可以應用到動態分配的數組中(釋放你分配的內容)。