PDA

Visualizza la versione completa : [C] Acquisizione matrice da file


Ennesimo000
15-02-2013, 23:28
Salve a tutti ragazzi, sto provando a svolgere un semplice esercizio, in cui devo acquisire una matrice 10X10 da un file di testo e poi stamparla a schermo.
Il file di testo Ŕ composto dai valori della matrice e dalla sua dimensione (elencata per ultima)
Il programma,dopo aver letto i valori da file, li memorizza in un vettore e poi effettua il passaggio da vettore a matrice.
Sto avendo alcuni problemi per quanto riguarda l'output prodotto dal programma, potreste indicarmi il perchŔ? :(

Questo Ŕ il codice del programma:

#include <stdio.h>

int dimensione(FILE*);
void acquisisci_matrice(FILE*,int, unsigned char(*)[10]);
void visualizza_matrice(unsigned char(*)[10], int);
void main()
{
FILE *fp;
int dim=0;
unsigned char A[10][10];
fp=fopen("matrice2.txt", "r");
if(fp==NULL) printf("File non esistente\n");
else
{
dim=dimensione(fp);
fclose(fp);
if(dim==0) printf("File vuoto!");
else
{
fp=fopen("matrice.txt", "r");
printf("La dimensione e' %d ",dim);
acquisisci_matrice(fp,dim,A);
visualizza_matrice(A,dim);
fclose(fp);

}
}
}

void acquisisci_matrice(FILE *fp, int DIM, unsigned char(*matrice)[10])
{
unsigned char vett[101];
unsigned char V;
int i=0;
printf("Acquisizione\n");
while(fscanf(fp,"%s", &V)!=EOF)
{ vett[i]=V; i++;
for(i=0;i<DIM;i++) printf("%c",vett[i]);
}
i=0;
printf("Passaggio da vettore a matrice\n");
for(int j=0;j<DIM;j++) {
for(int k=0;k<DIM; k++)
{ matrice[j][k]=vett[i]; i++; };
};

}

int dimensione(FILE *fp)
{ int DIM=0, V;
while(fscanf (fp, "%d", &V)!=EOF)
DIM=V;
return DIM;

mentre il file matrice.txt Ŕ semplicemente questo qui:

12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
10

l'output che mi dÓ Ŕ il seguente:

La dimensione e' 10 Acquisizione
16789012341678901234Passaggio da vettore a matrice
16789012341678901234567890123456789012345678901234 567890123456789012345678901234
5678901234567890 ╠╠╠Press any key to continue

Non capisco perchŔ visualizza i numeri in questo modo, e non capisco cosa sbaglio. Sicuramente ho disposto male i dati nel file, ma come dovrei disporli? Grazie in anticipo per l'aiuto e la pazienza :facepalm:

oregon
16-02-2013, 00:22
Manca la "visualizza_matrice"

Ennesimo000
16-02-2013, 13:18
Avevo dimenticato di copiarla nel codice postato, in realtÓ c'Ŕ... se non ci fosse penso che il compilatore mi avrebbe dato errori.
Eccola:


void visualizza_matrice(unsigned char(*matrice)[10], int DIM)
{int i,j;
for(i=0;i<DIM;i++)
{for(j=0;j<DIM;j++)
printf("%c", matrice[i][j]);
}}

Ennesimo000
17-02-2013, 00:19
Scusate l'insistenza, ma nessuno ha idea del motivo per cui mi viene generato questo output? Non riesco a capire come fare :afraid:

oregon
17-02-2013, 09:02
Tu all'inizio leggi il file matrice2.txt e poi il file matrice.txt ... perchÚ due file diversi?

E poi, nella funzione acquisisci_matrice (riscritta per chiarezza) in questo ciclo while



while(fscanf(fp,"%s", &V)!=EOF)
{
vett[i]=V;
i++;

for(i=0;i<DIM;i++)
printf("%c",vett[i]);
}


la variabile i viene utilizzata sia dalla while sia dalla for al suo interno ...

Ennesimo000
19-02-2013, 00:16
Originariamente inviato da oregon
Tu all'inizio leggi il file matrice2.txt e poi il file matrice.txt ... perchÚ due file diversi?

E poi, nella funzione acquisisci_matrice (riscritta per chiarezza) in questo ciclo while



while(fscanf(fp,"%s", &V)!=EOF)
{
vett[i]=V;
i++;

for(i=0;i<DIM;i++)
printf("%c",vett[i]);
}


la variabile i viene utilizzata sia dalla while sia dalla for al suo interno ...

E' lo stesso file, avevo cambiato il nome e ho dimenticato di averlo aperto due volte. In realtÓ nel mio codice c'Ŕ scritto "matrice.txt" da ambo le parti.


OK risolto. Ho spostato il ciclo for al di fuori del while (non aveva molto senso in effetti)
e nella fscanf ho sostituito lo specificatore %s con %c . Sembra andare
Grazie :D :D

Loading