PDA

Visualizza la versione completa : [C] Problema lettura di interi da file con separatore


goatboy
17-09-2014, 19:51
Salve a tutti. Devo leggere degli interi da file così composti:

1.2.3.4.
5.6.7.8.
1.2.3.4.
5.6.7.8.

La lettura da file è la seguente (e non da problemi senza il separatore):


void LeggiMatriceDaFile(double *m, int *dim)
{
int i;
FILE *fp;
fp=fopen("file.txt", "r");
for(i=0; i<*dim; i++){
fscanf(fp, "%lf", m);
m++;
}
fclose(fp);
}


Per provare a leggere quel tipo di file ho pensato di inserire nella fscanf la lettura di un carattere e di sovrascriverlo man mano.


void LeggiMatriceDaFile(double *m, int *dim)
{
int i;
char c;
FILE *fp;
fp=fopen("file.txt", "r");
for(i=0; i<*dim; i++){
fscanf(fp, "%lf%c", m, &c);
m++;
}
fclose(fp);
}


Andando a provare però, noto che mi salta dei numeri e quindi ad un certo punto sballa completamente dando numeri a caso. Non riesco a comprendere il perché.

Qualcuno riesce a darmi una mano? :confused:

oregon
17-09-2014, 23:21
Ovviamente il punto interferisce con la lettura in quanto interpretato come punto decimale (per un double).

Dato che sono interi, leggi così

fscanf(fp, "%d.", &val);

(nota il punto che verrà saltato) in cui val è un intero e poi convertilo in double

goatboy
18-09-2014, 09:38
Grazie mille :)

goatboy
18-09-2014, 15:37
Ho provato con la tua soluzione. Ma il cast credo non vada a buon fine.

Il codice è questo:


fscanf(fp, "%d.", &val);
m = (double*)val;


ma m vale sempre zero, mentre val assume i valori giusti della matrice.

oregon
18-09-2014, 21:41
Direi che fai un po' confusione con i puntatori ...

*m = (double)val;

goatboy
19-09-2014, 15:07
Direi che fai un po' confusione con i puntatori ...

*m = (double)val;

Si, in effetti ho fatto un po' di confusione.. :) grazie per l'aiuto.

Loading