cybergabry
04-04-2008, 15:22
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.
#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);
}
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.
#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);
}