PDA

View Full Version : [C] Lettura di matrici da file binario


HaleBopp12
08-04-2008, 18:48
Ciao a tutti,
ho creato queste due funzioni in C che permettono la lettura e la scrittura di un file binario. Sto sbattendo la testa da un'ora per un problema che non riesco a vedere. In pratica tutto funziona bene, finche' non viene letta la matrice. Solo i primi due valori vengono letti correttamente, mentre tutti gli altri non corrispondono. Potete darmi una mano?
Grazie mille!
:confused:

Davide.

PS: ecco il codice...


// write mapFile
int saveMap(char *mapfile)
{
int j,i;
FILE *optfile = fopen(mapfile,"w");
if ( optfile == NULL )
{
ERROR("Mapfile cannot be opened for reading...\n");
return 1;
}

// write gate voltages vector size
fwrite(&Vg_size, sizeof(double), 1, optfile);

// write gate voltages
fwrite(gate_voltages, sizeof(double), Vg_size, optfile);

// write drain voltages vector size
fwrite(&Vd_size, sizeof(double), 1, optfile);

// write drain voltages
fwrite(drain_voltages, sizeof(double), Vd_size, optfile);

// write current data
for(j=0; j<Vg_size; j++)
for(i=0; i<Vd_size; i++)
fwrite(&currents[j][i], sizeof(double), 1, optfile);

fclose(optfile);
return 0;
}

// loads the mapFile
int loadMap(char *mapfile)
{

int i,j;
FILE *iptfile = fopen(mapfile,"r");
if ( iptfile == NULL )
{
ERROR("Mapfile cannot be opened for reading...\n");
}

// read gate voltages vector size
fread(&Vg_size, sizeof(double), 1, iptfile);
free_vector(gate_voltages);
gate_voltages = allocate_vector(Vg_size);

// read gate voltages
fread(gate_voltages, sizeof(double), Vg_size, iptfile);

// read drain voltages vector size
fread(&Vd_size, sizeof(double), 1, iptfile);
free_vector(drain_voltages);
drain_voltages = allocate_vector(Vd_size);

// read drain voltages
fread(drain_voltages, sizeof(double), Vd_size, iptfile);

free_matrix(currents, Vg_size);

// read current data
currents = allocate_matrix(Vg_size, Vd_size);

for(j=0; j<Vg_size; j++)
for(i=0; i<Vd_size; i++)
fread(&currents[j][i], sizeof(double), 1, iptfile);

fclose(iptfile);
return 0;
}