1

我正在创建一个链接列表,然后将其写入文件并再次读取。我正在使用 fwrite 和 fread 一次写入和读取结构的整个实例。但问题是它不能正常工作。我想在看到输出文件后写作工作正常,但仍然不确定。但是阅读根本不起作用。

下面是结构

struct student
{
int roll_num;
char name[100];
struct student *next;
};

下面是逻辑

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);

虽然我暂时只阅读了一个实例,但它仍然无法正常工作。没有任何内容存储在 temp->name 中,0 存储在 temp->roll_num 中。我坚持了最后4个小时。我可以通过单独存储结构元素来做到这一点,但这次我想用不同的方式来做。

对于所有重要的人来说,这是一个家庭作业问题。

任何帮助将不胜感激。谢谢 :)

4

1 回答 1

1

对于初学者,

close(ifd); 

不正确,因为它不是描述符,它是一个FILE*. 采用:

fclose(ifd);

由于您没有刷新,除非它是一个相当大的列表,否则可能还没有写入任何内容,并且您的新分配将是列表中唯一的分配,因为您的文件中还没有数据。

于 2013-01-20T07:32:57.017 回答