PDA

View Full Version : [C]leggere valori float da un file txt


Thunderx
02-12-2008, 22:46
Salve a tutti.
dovrei leggere dei valori float in notazione scientifica (del tipo 3.4*10^5)da un file txt e i valori di 4 in 4 devono andare in un array di 4 elementi(questo vettore rappresenta il vettore di misura di un target).Tutti i valori relativi ad ogni grandezza sono incolonnati.Come posso di volta in volta passare questi valori?Io avevo pensato alla fscanf, ma non saprei come farla passare dalla prima riga di valori alla seconda e così via e comefar terminare la funzione una volta che non ci sono più valori ma solo spazio vuoto...
Grazie a tutti

Vincenzo1968
02-12-2008, 23:12
Ciao,

i numeri nel file sono proprio nella forma che hai indicato: 3.4*10^5 ? O così : 3.4e+5 ?

Thunderx
02-12-2008, 23:17
Ciao,

i numeri nel file sono proprio nella forma che hai indicato: 3.4*10^5 ? O così : 3.4e+5 ?

3.4e+5....hai ragione questa è la forma corretta;)

Rikiji
02-12-2008, 23:36
float a;
scanf("%e",&a);

Thunderx
03-12-2008, 06:55
float a;
scanf("%e",&a);

Innanzitutto grazie rikiji...il mio dubbio però era questo:alla seconda chiamata della funzione come faccio a dirgli di iniziare a leggere i valori dalla seconda riga?

Rikiji
03-12-2008, 11:05
ah pensavo avessi solo un problema con la formattazione dei numeri.

La fscanf restituisce EOF quando incontra la fine del file, dal man
The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs.
Quindi fai una cosa tipo

while (a != EOF) {
a=fscanf(.....
}

inoltre

fscanf() reads input from the stream pointer stream

cioè quando legge poi sposta il pointer stream al punto dove si è fermata e riparte a leggere da lì.

Thunderx
03-12-2008, 13:14
ah pensavo avessi solo un problema con la formattazione dei numeri.

La fscanf restituisce EOF quando incontra la fine del file, dal man

Quindi fai una cosa tipo

while (a != EOF) {
a=fscanf(.....
}

inoltre



cioè quando legge poi sposta il pointer stream al punto dove si è fermata e riparte a leggere da lì.
OTTIMO...Hai centrato perfettamente il mio dubbioe cioè...fscanf sposta lo stream pointer e lo tiene li o lo resetta a d ogni chiamata?

Thunderx
04-12-2008, 17:17
altro problemuccio....
passare un array bidimensionale ad una funzione...
ho una matrice mat 4x4
nella dichiarazione della funzione scrivo

void inversa ( int (*a) [4])
{.......}


e nel main la richiamo con
inversa (mat);

Giusto?


Inoltre il compilatore mi da un altro errore:
main is not a static function
cosa vuol dire?