PDA

View Full Version : [C] leggere un file e memorizzare in un array


Crisup
13-07-2011, 17:08
Ho fatto questa funzione dove ho un file da cui devo leggere dei numeri e memorizzarli in un array, il primo numero corrisponde a quanti elementi ha il file (e quindi non va memorizzato nell'array). Fin qui tutto ok.

void readArray( FILE* fin, double *x, int *pN){
fscanf(fin,"%d",pN);
if(*pN>NMAX){
printf(" troppi elementi, al massimo possono essere %d\n",NMAX);
*pN=0;
return;
}
int i;
for (i=0;i<*pN;i++){
fscanf(fin,"%lf",x+i);
}
}


Ora, vorrei fare una cosa credo più semplice ma non ci riesco :D
Devo leggere da un file i numeri che contiene e memorizzarli in un array. Nel file c'è solo l'elenco di numeri che devo poi mettere nell'array.

Ho provato a fare così, ma la prima riga mi da tutti 0:
void readArray( FILE* fin, double *x, int *N){
int i;
for (i=0;i<*N;i++){
fscanf(fin,"%lf",x+i);
}
}

Help!

BlackShark92
13-07-2011, 18:00
Allora, il problema è uno: il fatto di non sapere a priori quanti numeri andare ad inserire, ti costringe a dover dichiarare un array di lunghezza generica (la lunghezza massima), ma così facendo se il numero degli elementi è minore ti ritroverai con il resto del vettore pieno di 0. Viceversa, se il numero degli elementi è maggiore, i restanti non verranno memorizzati nell'array. Detto questo, così

for (i=0; i< dimensione_vettore; i++)
fscanf(puntatore_al_file, "%d", &vettore[i]); /*l'& puoi anche ometterlo, e ovviamente se i dati non sono interi devi modificare il %d (ad esempio in %lf se sono double)*/

dovrebbe andare ;)

Crisup
13-07-2011, 19:45
Grazie, funziona!

zanardi84
16-07-2011, 12:09
Interessa anche a me, ma uso il c++ e so a priori il numero degli elementi che ho sulla riga del file e la dimensione dell'array.

Pensavo di imbastire un ciclo for in cui ad ogni passo leggo un carattere della riga del file, lo converto nel formato che mi occorre, e lo inserisco nella posizione dell'array che ad ogni passo incremento.
Non ho ancora scritto il codice.

Può andare o si può fare di meglio?