Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

how to read data from a file in this exercise?

I have to do this exercise:

short explanation:

read a file, and store informations in a struct pointed to by a pointer.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

long explanation:

I have a struct "person", and it contains: char name[256]; unsigned int age.

struct person {
    char name[256];
    unsigned int age;
};

I have to implement this function:

void person_read (FILE *f, struct person *pp);

I have to read informations with this formatting style:

<person's name> <whitespace> <age> 
<person's name> <whitespace> <age> 
<person's name> <whitespace> <age> 
<person's name> <whitespace> <age> 

and store each data in the struct pointed to by this pointer.

the problem is that I have no idea how to read person’s name, skip whitespace and then read age. How can I set up a reading function like this: 1) read person’s name, 2) skip whitespace, 3) read age ?

fgetc() function is not a solution, because it reads only 1 character, and a person’s name doesn’t have 1 single character. on the other hand, fscanf() function reads everything.

my idea is to use 1) read, 2) check, 3) use

  1. read a char, check if it’s not a whitespace, if it’s true, then store in the array name of the struct. (if it’s true, that means that in the array I have full person’s name).
  2. read again, and again, and so on until a whitespace it’s reached. Then skip the whitespace.
  3. read age, and store it in the struct (unsigned int age).

but I think I’m overcomplicating the job. is there a simpler way?

>Solution :

The canonical solution is:

int r = fscanf(f, "%255s %u\n", p->name, &p->age);

where p your person pointer. You want to check that r is 2 in this case so you have a valid data for both fields.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading