|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
[C] Problema lettura file con fread
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);
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
Toc toc, c'è nessuno...???
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Per i double lo specificatore di formato per le Xprintf è %f non %lf.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
Quote:
dim=4 Re=0.000000 Im=0.000000 Re=0.000000 Im=0.000000 Re=0.000000 Im=0.000000 Re=0.000000 Im=0.000000 |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2008
Città: Bari
Messaggi: 68
|
Il codice per la lettura sembra a posto.... evidentemente il problema
e nel codice che scrive il file, io ho provato a scrivere complessi.dat con questo codice e mi ha dato l'output corretto #include <stdio.h> int main() { FILE *hfile; hfile = fopen("complessi.dat", "wb"); double vars[] = { 4523.236, 4589.325, 452.236, 4879.69, 7854.39, 8953.24, 246.27, 789.56}; fwrite(&vars, sizeof(double), 8, hfile); fclose(hfile); return 0; } |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Confermo che il tuo codice sopra è corretto. E quindi presumo che sia "chi scrive" quel file che non fa il suo dovere.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
Andbin e T-Jack, vi ringrazio veramente tanto per l'aiuto, vi siete dimostrati molto disponibili. Mi avete tolto questo dubbio in vista dell'esame.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:30.




















