2010-11-21 22 views
0

CでFILE * fpを使用して保存された行列を読み取る方法は? ファイルを読み取る際の問題

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

あなたはおそらくあなたが持っている問題について言及したいですか? –

+0

どのような出力が得られますか? – rtpg

答えて

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

1

文字を割り当てられたスペースに整数を読み込もうとしています。を使用する必要がある場合は、malloc()の操作はsizeof(char *)sizeof(char)という形で行われます。これは問題を引き起こすだろう。

あなたのプリントとスキャンの関係を確認してください。現時点では、データの各行に最後の数字だけを印刷しようとしますが、jの値がプリントが表示されているポイントにあるものについて考える必要があります。

おそらく、データが有効であることを確認するために、返品ステータスをscanf()から確認する必要があります。おそらく、入力ファイルも閉じているはずです。プログラムは現時点ですぐに終了しますが、「取得するリソースを解放する」ことは、取り入れる良い規律です。動的に割り当てられた配列にも同じコメントを適用できます(割り当てたものを解放してください)。

関連する問題