2010-11-21 24 views
0

C dilinde FILE * fp kullanılarak kaydedilen bir matris nasıl okunur? dosyaları okumak için sorun

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; 
} 

Bu

okumak istiyorum matristir:

1 2 9 
3 6 7 
4 9 5 
+1

Muhtemelen sahip olduğunuz problemden bahsetmek ister misiniz? –

+0

hangi çıktı elde edersiniz? – rtpg

cevap

2

düşünün

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 

olmak: Eğer dizisinin sınırları dışındaysa baskılar yayınlanmıştır Ne

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

bile sorun olduğunu tahmin ediyorum. Sorun nt iyi tanımlanmış. – prap19

1

Tamsayıları karakterler için ayrılmış alana okumaya çalışıyorsunuz - malloc() işlemleriniz sizeof(char *) ve sizeof(char) açısından int kullanmanız gerektiğinde. Bu sorunlara neden olacak.

Yazıcınızın taramayla ilişkili olduğunu gözden geçirmelisiniz; Şu anda, her veri satırında yalnızca son sayıyı yazdırmayı deniyorsunuz, ancak j'un değerinin baskının göründüğü noktada ne olduğunu düşünmeniz gerekiyor. Verilerin geçerli olduğundan emin olmak için scanf() numaralı telefondan geri dönüş durumunu da kontrol etmelisiniz. Muhtemelen giriş dosyasını da kapatmalısınız; Program şu anda hemen çıksa da, 'aldığınız kaynakları serbest bırakın' içeri girmek için iyi bir disiplindir. Aynı yorum dinamik olarak ayrılmış diziye de uygulanabilir (ayırdığınız şeyi serbest bırakın).

İlgili konular