beh avevo avevo testato anche la fscanf con una scrittura del tipo
codice:
for(tmp1=0;tmp1<x;tmp1++)
    fscanf(fp, "%lf %lu", &p[tmp1].valore, &p[tmp1].classe);
ma l'output è lo stesso. alla fine devo solo leggere dal file in ciclo 'x' righe di valori e metterli in una struct; si può fare con entrambe le funzioni...

la consegna: (andrebbero fatte in due file separati, funzione e main intendo, li ho uniti per comodità)

Creare i file dati.h e dati.c che consentano di utilizzare la seguente
struttura:

struct dato {
double valore;
unsigned classe;
};

e la funzione:

extern struct dato *read_dati (const char *filename, unsigned int *pn);

La struttura contiene il campo valore che descrive un certo valore numerico e
il campo classe che descrive la tipologia del dato. La classe sarà un valore
tra 0 e 10.
La funzione accetta come parametro un nome di file che deve essere aperto in
lettura in modalità tradotta (testo) e un puntatore ad una variabile di tipo
unsigned int in cui si dovrà inserire il numero di dati presenti in un file
così strutturato:

<valore><whitespace><classe><a capo>
<valore><whitespace><classe><a capo>
<valore><whitespace><classe><a capo>
...

La funzione deve ritornare un puntatore ad una zona di memoria (allocata
dinamicamente nell’heap) contenente tutti i dati letti dal file.

Ad esempio, un file valido è:

0.0961 2
0.4929 0
0.9252 0
0.2186 1

In questo caso la variabile puntata da pn varrà 4. Per testare la funzione,
utilizzare i file dati1.txt, dati2.txt, dati3.txt disponibili nella pagina
dell'esame.