Buonasera,
data la seguente struttura
typedef struct utente{
int userid;
int eta;
int genere;
int num_film;
char occupazione[20];
} utente;
e l'array di struttura
utente utenti[100];
la seguente porzione di codice non funziona a dovere:
FILE *dest;
if((dest = fopen("users.txt", "r")) == NULL)
printf("Impossibile leggere il file. ");
else
for (int i=1; i<100; i++){ //************INIZIO CICLO FOR**********
fscanf(dest,"%s\n", &test2); //legge i numeri dal file
printf(" %s\n", test2);
line = test2;
utenti[i].userid = strtok(line, ",");
printf(" %s \n", utenti[i].userid);
utenti[i].eta = strtok(NULL, ",");
printf(" %s \n", utenti[i].eta);
utenti[i].genere = strtok(NULL, ",");
printf(" %s \n", utenti[i].genere);
utenti[i].num_film = strtok(NULL, ",");
printf(" %s \n", utenti[i].num_film);
strcpy(utenti[i].occupazione , strtok(NULL, ","));
printf(" %s \n", utenti[i].occupazione);
}//FINE CICLO FOR*****************************************************************************
fclose(dest);
printf(" %s \n", utenti[33].genere);
printf(" %s \n", utenti[33].num_film);
printf(" %s \n", utenti[96].genere);
printf(" %s \n", utenti[96].num_film);
Perché?
Quando eseguo il programma scorre tutti i record presenti nel file ma poi dalla stampa di
printf(" %s \n", utenti[33].genere);
printf(" %s \n", utenti[33].num_film);
printf(" %s \n", utenti[96].genere);
printf(" %s \n", utenti[96].num_film);
capisco che l'array di struct contiene solo l'ultimo elemento.
Quando provo a scrivere un altro file prendendo i dati dall'array con il codice
FILE *destinazione;
if((destinazione = fopen("users_ordinati.txt", "w")) == NULL)
printf("Impossibile scrivere sul file. n");
else
for (int i=0; i<100; i++){//INIZIO CICLO FOR*****************************************************************************
fprintf(destinazione,"%s\n", utenti[i].userid); //legge i numeri dal file
}//FINE CICLO FOR*****************************************************************************
fclose(destinazione);//
si ripropone lo stesso problema. Sembra che l'array contenga in tutte le sue 100 posizioni solo l'ultima serie di dati.
Grazie