PDA

Visualizza la versione completa : Linguaggio c- ricerca riga per riga in un file


zabby
15-06-2015, 00:51
salve ragazzi sono nuovo del forum, ho un problema con la lettura di un file e memorizzare i dati in una struct
il file contiene una lista di dati di persone del tipo
MARIO
ROSSI
27/11/95
ROMA
M
FRANCO
ADDANTE
25/06/1987
MILANO
M
.
.
.

questa la struct..


typedef struct person_struct{
char surname[MAX_SURNAME]; /**< Stringa contenente il cognome. */
char name[MAX_NAME]; /**< Stringa contenente il nome. */
char birth_date[BIRTH_DATE_LEN]; /**< Stringa contenente la data di nascita. */
char birth_place[MAX_BIRTH_PLACE]; /**< Stringa contenente il luogo di nascita. */
char sex; /**< Carattere che indica il sesso. */
char cf[CF_LEN]; /**< Stringa contenente il codice fiscale. */
}person;


questa la mia funzione chiamata che riceve il file e ne legge 5 righe..il problema sta nel fatto che al primo giro riesco a leggere i dati e momorizzarli nella struct ma quando chiamo di nuovo la funzione e quindi accedo di nuovo al file non mi parte dalla sesta riga ovvero quella contenente altri dati anagrafici di persone.. ho provato a usare un puntatore di posizione ma con scarsi risultati..:dh::dh: spero voi riusciate a risolvere il problema.. grazie in anticipo..



person* read_person(FILE* people_file){

person struct_person; //struct del tipo person
fpos_t* pos; //indicatore di posizione


if(people_file == NULL){
printf("Impossibile aprire il file.\n");
exit(1);
}

fsetpos(people_file,pos);

fgets(struct_person.surname, MAX_SURNAME, people_file);

fgets(struct_person.name, MAX_NAME, people_file);

fgets(struct_person.birth_date, BIRTH_DATE_LEN, people_file);

fgets(struct_person.birth_place, MAX_BIRTH_PLACE, people_file);

struct_person.sex = fgetc(people_file);


fgetpos (people_file, pos);
person_ptr=&struct_person;

return person_ptr;
}

Samuele_70
15-06-2015, 20:00
Attento che fgets() e fgetc() si comportano in modo diverso con i "ritorno a capo"

Loading