lsmCC 发表于 2023-12-26 12:27:02

求助

void save(Employee* head)
{
    if(head==NULL)
    {
      printf("链表为空,保存失败\n");
      return;
    }
   
    FILE* fp=fopen("employee_list.txt","wb");
    if(fp==NULL)
    {
      printf("打开文件失败\n");
      return;
    }
   
    Employee* p = head;
    while(p!=NULL)
    {
      fwrite(p, sizeof(Employee), 1, fp);
      p = p->next;
    }
   
    fclose(fp);
    printf("员工信息已保存到文件中\n");
}
已经写了一个保存链表的到文件,怎么从文件读取信息呢

FishC 发表于 2023-12-26 12:27:15

你好!要从文件中读取信息,你可以编写一个函数来实现。以下是一个简单的示例代码:

void load(Employee** head)
{
    FILE* fp = fopen("employee_list.txt", "rb");
    if(fp == NULL)
    {
      printf("打开文件失败\n");
      return;
    }
   
    Employee* p = NULL;
    Employee* prev = NULL;
    while(1)
    {
      p = (Employee*)malloc(sizeof(Employee));
      if(fread(p, sizeof(Employee), 1, fp) != 1)
      {
            free(p);
            break;
      }
      p->next = NULL;
      if(*head == NULL)
      {
            *head = p;
      }
      else
      {
            prev->next = p;
      }
      prev = p;
    }
   
    fclose(fp);
    printf("员工信息已从文件中加载\n");
}

这个函数会从文件中读取员工信息,并将它们构建成链表。在读取过程中,我们使用`fread`函数来读取一个`Employee`结构体对象的内容,并通过动态内存分配来创建新的节点。最后,我们将新节点添加到链表的末尾。

请注意,在调用此函数之前,请确保链表已经被清空,即`*head`为NULL。另外,为了避免内存泄漏,记得在不需要时释放链表中的节点。

希望对你有帮助!如果有任何问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 求助