Reputation: 69
I am creating a linked list then writing it to a file and reading it again. I am using fwrite and fread to write and read a whole instance of a structure at a time. But the problem is it is not working correctly. I suppose writing is working fine after seeing the output file but still not sure about it. But reading is not working at all.
Below is structure
struct student
{
int roll_num;
char name[100];
struct student *next;
};
Below is logic
ifd = fopen("qwer1234.txt","wb");
struct student *temp;
temp = start;
while(temp != NULL)
{
fwrite(temp, sizeof(struct student), 1, ifd);
temp = temp->next;
}
close(ifd);
ifd = fopen("qwer1234.txt","rb");
temp = NULL;
temp = malloc(sizeof(struct student));
fread(temp, sizeof(struct student), 1, ifd);
start = temp;
//temp->next = NULL;
printf("%s\t%d\n",temp->name,temp->roll_num);
temp = malloc(sizeof(struct student));
/*while(fread(temp, sizeof(struct student), 1, ifd) == 1)
{
temp->next = start;
start = temp;
printf("%d/n",temp->roll_num);
temp = malloc(sizeof(struct student));
}*/
close(ifd);
Although I am only reading a single instance for the time being, it is still not working. Nothing gets stored in the temp->name and 0 gets stored in temp->roll_num. I am stuck on it for last 4 hours. I can do it by storing elements of structure individually but wanted to do by a different way this time.
And for all those for whom it matters, this is a homework question.
Any help would be greatly appreciated. Thanks :)
Upvotes: 1
Views: 813
Reputation: 66204
For starters,
close(ifd);
is not correct, since it isn't a descriptor, its a FILE*
. Use:
fclose(ifd);
Since you're not flushing, unless it is a sizable list chances are nothing is written yet and you're new allocation will be the only one in the list since you have no data in your file yet.
Upvotes: 1