Ciao a tutti di nuovo,
vi propongo una nuova questione che non sono proprio riuscito a risolvere.
Il seguente programma legge un file binario di complessi. Il file che ho creato riporta i seguenti dati:
4523.236
4589.325
452.236
4879.69
7854.39
8953.24
246.27
789.56
la prima riga è la parte reale del primo complesso, la seconda è la parte immaginaria del primo complesso, la terza è la parte reale del secondo complesso, la quarta è la parte immaginaria del secondo complesso e così via...
Il programma legge il file, e riporta nella variabile dim il numero di numeri complessi ivi contenuti, così alloca dinamicamente la memoria per un vettore allo scopo di poterli contenere tutti. Il problema è che anche se alloca la quantità corretta di memoria (4 numeri complessi) quando viene mandato in stampa il vettore restituisce tutti zeri. Dove sbaglio? Vi ringrazio sempre tanto per l'aiuto.
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
double re, im;
} complesso;
void carica (FILE *fp, complesso *vet, int dim);
int main ()
{
FILE *fp;
complesso *vet, elem;
int dim=0, i;
if ((fp=fopen ("complessi.dat", "rb"))==NULL)
{
perror ("Al tentativo di apertura del file si e' verificato l'errore: ");
return -1;
}
while ((fread (&elem, sizeof(complesso), 1, fp))!=0)
dim++;
printf ("\ndim= %d", dim);
rewind (fp);
vet= (complesso*) malloc (dim*sizeof(complesso));
carica (fp, vet, dim);
for (i=0; i<dim; i++)
printf ("\nRe= %lf Im= %lf", vet[i].re, vet[i].im);
return 0;
}
void carica (FILE *fp, complesso *vet, int dim)
{
int i;
for (i=0; i<dim; i++)
fread (&vet[i], sizeof(complesso), 1, fp);
}