2010-11-21 3 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

Возможно, вы хотите упомянуть проблему, с которой вы сталкиваетесь? –

+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), если вам нужно использовать int. Это вызовет проблемы.

Вы должны проверить, где находится ваша печать относительно сканирования; на данный момент вы пытаетесь напечатать только последнее число в каждой строке данных, но вам нужно подумать о том, что значение j находится в точке, где отображается печать.

Возможно, вы также должны проверить статус возврата от scanf(), чтобы убедиться, что данные действительны. Вероятно, вы также должны закрыть входной файл; хотя программа сразу же выйдет на данный момент, «освободить ресурсы, которые вы приобретаете», является хорошей дисциплиной для входа. Тот же комментарий может быть применен и к динамически выделенному массиву (освободите то, что вы выделите).

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