PDA

Visualizza la versione completa : [C] array e file


jaso
19-12-2008, 15:47
Buonasera,

vorrei realizzare un programma che legge da file una sequenza di numeri e metta il primo numero nel primo elemenento del vettore e il secondo numero del file nel secondo elemento del vettore ecc

ho provato cosi

void init(int** array_ptr,FILE* handle,int N )
{
int count;
int i;

*array_ptr=(int*)malloc(N*sizeof(int));


for(count=0;count<N;count++)
fscanf(handle,"%d",array_ptr[count]);

/*
count=0;
while(fscanf(handle,"%d",&i)!=EOF)
{
(*array_ptr)[count]=i;
count++;
}*/

rewind(handle);
}

init una funzione che riceve l'indirizzo di un indirizzo a partire dal quale verr memorizzato l'array di lunghezza N, l'indirizzo di handle, la lunghezza del file che la lunghezza del vettore (determinato in un'altra funzione).

quando il programma nel primo for nel primo elemento del vettore ci salva tutti i numeri che sono presenti nel file es:

il file contiene questi numeri : 123
allora
(*array_ptr)[0] vale 123
(*array_ptr)[1] vale 0
(*array_ptr)[2] vale 0

io invece vorrei che il primo numero sia contenuto nel primo elemento del vettore..

come posso fare?

PS: ho provato anche cosi

..
count=0;
while(fscanf(handle,"%d",array_ptr[count])!=EOF)
count++;
..

solito risultato

Gil Mour
19-12-2008, 16:16
Intanto, al posto tuo, io caricherei il contenuto del file in memoria.
Assumendo allora che il contenuto del file sia memorizzato in una stringa, potresti fare una cosa del genere



int main()
{
char * str = "1358";
int arr[4];
int i;

for (i=0; i<4; i++)
{
sscanf(str++,"%1d",&arr[i]);
}

}


Dove N=4.
Devi assolutamente accertarti che N non vada oltre i limiti consentiti.

Stoicenko
19-12-2008, 16:20
Dai un'occhiata al regolamento prima di postare.. il codice va in un blocco CODE o PHP per renderlo pi comprensibile.. cos troppo incasinato

jaso
19-12-2008, 19:26
il file file.dat contiene:

1234

e basta senza invii e spazi.

il fatto che io voglio memorizzare su un vettore lungo N dove N il numero degli elementi interi presi nel file.dat i numeri presenti nel file

quindi V[0] ha da essere uguale a 1
V[1] uguale a 2
e cosi via..

il codice da me scritto non va bene

oregon
19-12-2008, 19:57
Non devi usare un ciclo, ma solo la fscanf ...

jaso
19-12-2008, 21:11
eh non ho capito come..

fscanf(handle,"%d",array_ptr); ?? cosi?

oregon
19-12-2008, 21:24
Originariamente inviato da jaso
fscanf(handle,"%d",array_ptr);

S ... hai provato?

jaso
19-12-2008, 22:15
allora ho risolto:

il file diventato:
1 2 3
(con uno spazio dopo il 3)

il codice invece:


void init(int** array_ptr,FILE* handle,int N )
{
int count;

N=N/2;
*array_ptr=(int*)malloc(N*sizeof(int));

for (count=0; count<N; count++)
{
fscanf(handle,"%d",&(*array_ptr)[count]);
printf("%d ",(*array_ptr)[count]);
}

rewind(handle);
}

oregon
19-12-2008, 22:21
Avevi scritto


il file file.dat contiene:

1234


poi scrivi


il file diventato:
1 2 3
(con uno spazio dopo il 3)

... se cambi la situazione durante il discorso (senza neanche una spiegazione) ogni risposta e' inutile ... :madai!?:

jaso
19-12-2008, 22:25
e c'hai ragione..
scusa
il file diventato 1 2 3
(con lo spazio dopo il tre)

ma funziona anche aggiungendo il 4 il 5 il 6 ....

e anche il 7 penso...

a condizione che ci sia lo spazio dopo l'ultimo numero.

forse anche l'8

Loading