Hello, OnlineGDB Q&A section lets you put your programming query to fellow community users. Asking a solution for whole assignment is strictly not allowed. You may ask for help where you are stuck. Try to add as much information as possible so that fellow users can know about your problem statement easily.

Having trouble adding I/o to this file and save command

0 votes
asked Mar 26, 2022 by Josiah McSweeney (120 points)

Implement a function writeEmpToFile that takes two arguments: a struct Employee pointer and a FILE *. 

It should write each field in order as an appropriate type. Note that you will probably want to write a length of the name before you write the characters of the name.  By doing this, when you write the load function below, you can read the length of the string and use it to malloc a buffer of the proper size to hold the name.  

Because of the embedded name pointer, you CAN NOT write the Employee struct as a single struct. You will need to write it out field by field.  You will want to write this as a binary file, not as a text file.

Implement a SAVE command in your main loop that will save all the employees out to a file. The SAVE command should ask for a file name, similar to the way your FIND command asked for a name. 


 

Below is the work I have done so far that is required from the text above but I have not been able to finish it and I need assistance with making the final changes that I have missed from the image that I have provided If you want to see the full code that this chunk of code is supposed to function with it is in the link below 


 

void writeEmpToFile(Employee *emp, FILE *f) {

    fwrite(&emp->salary, sizeof(emp->salary), 1, f);

    fwrite(&emp->yearBorn, sizeof(emp->yearBorn), 1, f);

    fwrite(emp->ssn, sizeof(char), SSN_SIZE, f);

    int len = strlen(emp->name) + 1;

    fwrite(&len, sizeof(int), 1, f);

    fwrite(emp->name, sizeof(char), len, f);

}


 

https://onlinegdb.com/nWSAIx8hCn

1 Answer

0 votes
answered Apr 8, 2022 by Peter Minarik (86,040 points)

I had a quick look.

I think you should be fine with

int len = strlen(emp->name);

as strlen() returns you the number of characters in the string. You do not need to store the terminating zero (but you can, if you want). However, you will have to remember to have a terminating zero at the end of the name when you reconstruct the Employer structure.

Other than that, the logic seems fine to me. Do you have any particular issue?

Welcome to OnlineGDB Q&A, where you can ask questions related to programming and OnlineGDB IDE and and receive answers from other members of the community.
...