c - Passing fscanf to struct -


i'm trying open file , pass struct, i'm using fscanf() loop, saves 1 struct last read:

imagine file:

jr john rambo 24353432  jl john lennon 6435463 

i'm using code:

typedef struct people{     char code[10];     char name[100];     long telephone; }people;  int read(people people[], int n_p){     char temp;     file *fp;     fp=fopen("example.txt","r");     if(fp==null){         printf("error\n");         return -1;     }     while(!feof(fp)){         fscanf(fp,"%s %s %s %d\n", people[n_p].code,people[n_p].name,                &people[n_p].telephone);     } } 

the problem saves last line of file...should if cicle??

another question how can separate similar file ";"

first of all, scanning 3 strings (%s) , 1 int (%d) when pass 3 parameters in fscanf(). add char first_name[50]; in struct , do:

fscanf(fp,"%s %s %s %d\n", people[n_p].code,people[n_p].first_name,          people[n_p].name, &people[n_p].telephone); 

you fscanf() file until have nothing more read (due !feof(fp) because of while. in last people[n_p] variable last line of file saved.

you remove while read() , add file * parameter function don't open file each time call read().

something maybe:

main() {    file* fp = fopen("example.txt", "r");    int = 0;     while (!feof(fp)) {        read(people, i, fp);        i++;    } }  int read(people people[], int n_p, file* fp){    char temp;     if(fp==null){        printf("error\n");        return -1;    }    fscanf(fp,"%s %s %s %d\n", people[n_p].code,people[n_p].first_name,           people[n_p].name, &people[n_p].telephone);  } 

for using ; separator can change fscanf() this:

 fscanf(fp, "%[^;]; %[^;]; %d\n", people[n_p].code,people[n_p].name,              &people[n_p].telephone); 

edit wrote above code can found here , works fine example.txt file input.


Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -