fscanf返回值和链接列表

时间:2018-11-29 12:20:16

标签: c linked-list scanf

这是我的代码的一部分。

while(1)
    {
      struct client* newnode = malloc(sizeof(client));

      if(head->next != NULL)
      {
        newnode = newnode -> next;
      }

      if(head->next == NULL)
      {
       newnode->next = head->next;
       head->next=newnode;
      }


     ReadEOF = fscanf(fp1,"%d %s %s %s %s\n",&(newnode->ID),newnode->PW,newnode->NAME,newnode->ADDRESS,newnode->PNUM);

     if((ReadEOF)!= 5)
     {
       break;
     }

     ++NumofClient;
     printf("%d",NumofClient);

   }   //make newnodes

这些代码写在循环之前。

 struct client* head=malloc(sizeof(client));
 head->next = NULL;
 int NumofClient = 0;
 int ReadEOF;

这是结构客户端。

typedef struct client{
  int ID;
  char PW[100],NAME[100],ADDRESS[100],PNUM[100];
  struct client* next;
}client;

这是client.txt文件。

 123 aa aa aa aa aa
 234 bb bb bb bb bb
 567 cc cc cc cc cc

我期望NumofClient的值为3。

但是我发现当NumofClient的值为1时程序会从循环中退出。

这意味着fscanf函数的第二次返回值不是5。

或者,链表实现期间是否发生任何错误?

如果需要,我会很乐意在注释中写完整的代码

1 个答案:

答案 0 :(得分:2)

您正在覆盖(内存泄漏)并将垃圾(未初始化的值)分配给以下位置的新节点:

  if(head->next != NULL)
  {
    newnode = newnode -> next;
  }

我想你想要

  newnode->next = head;
  head = newnode;