user-0 提问: 结构体指针

回复:
user: user-1
content: 问题解决了就要结贴哦

user: user-2
content: in函数？   把队列写入文件 前面/* 。。。*/ 注释掉了，没有意义的错误代码啊。  输出函数再弄个新的head指针没有任何意义。 这个函数就不应该有返回。  函数并没有改变链表的任何东西。  感觉这个函数本来是从磁盘文件读的数据到链表的，所以才会有返回值。然后在这个读入函数基础上改造成了输出。 读入函数需要返回链表的头。 写文件不需要。  而且，从写文件的角度， 头节点写到文件里面没有意义。本来就没有效数据。 没所谓，只要和你的读文件函数能对上就行。 这里写入，读的时候也从磁盘读入head节点才对。

user: user-0
content: 引用 10 楼 自信男孩 的回复：[quote=引用 9 楼 Tony.Lei 的回复:] [quote=引用 7 楼 寻开心 的回复：]开始的 end=NULL只是初始化。没有意义。 em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL; // 弄出个空的头节点     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)    exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");         scanf("%s%s%s%s%s%s%s%s",p->num, p->name, p->sex, p->age, p->xueli, p->gongzi, p->adress, p->phone); // 这里都是字符串？ p的下面的那些属性都是字符串？          end->next = p; // 挂在end后面          end = p; // 更新end指针     }     end->next=NULL;  // 最后一个节点的next是NULL，表示到了队列尾巴了     head = in(head);   // 这是做啥呢？ 似乎没有意义啊。head一直就没有变过     return head; }  这串代码没有什么问题啊， 除了那个in（head）不知道要做什么。？ 你的疑问是什么东西。麻烦您看一下下面那个代码[/quote] 自己写的代码不知道in函数是做什么的吗？  in是写文件，append函数是追加，即给链表追加节点，调用in是将追加的信息更新到文件中。[/quote]好的，谢谢，能否回答一下我刚刚问您的那个帖子

user: user-3
content: 引用 9 楼 Tony.Lei 的回复:[quote=引用 7 楼 寻开心 的回复：]开始的 end=NULL只是初始化。没有意义。 em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL; // 弄出个空的头节点     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)    exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");         scanf("%s%s%s%s%s%s%s%s",p->num, p->name, p->sex, p->age, p->xueli, p->gongzi, p->adress, p->phone); // 这里都是字符串？ p的下面的那些属性都是字符串？          end->next = p; // 挂在end后面          end = p; // 更新end指针     }     end->next=NULL;  // 最后一个节点的next是NULL，表示到了队列尾巴了     head = in(head);   // 这是做啥呢？ 似乎没有意义啊。head一直就没有变过     return head; }  这串代码没有什么问题啊， 除了那个in（head）不知道要做什么。？ 你的疑问是什么东西。麻烦您看一下下面那个代码[/quote] 自己写的代码不知道in函数是做什么的吗？  in是写文件，append函数是追加，即给链表追加节点，调用in是将追加的信息更新到文件中。

user: user-0
content: 引用 7 楼 寻开心 的回复：开始的 end=NULL只是初始化。没有意义。 em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL; // 弄出个空的头节点     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)    exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");         scanf("%s%s%s%s%s%s%s%s",p->num, p->name, p->sex, p->age, p->xueli, p->gongzi, p->adress, p->phone); // 这里都是字符串？ p的下面的那些属性都是字符串？          end->next = p; // 挂在end后面          end = p; // 更新end指针     }     end->next=NULL;  // 最后一个节点的next是NULL，表示到了队列尾巴了     head = in(head);   // 这是做啥呢？ 似乎没有意义啊。head一直就没有变过     return head; }  这串代码没有什么问题啊， 除了那个in（head）不知道要做什么。？ 你的疑问是什么东西。麻烦您看一下下面那个代码

user: user-0
content: em *in(em *head)//将数据写进文件 {     FILE *fp;     em *p;     /*        head=(em *)malloc(sizeof(em));        if(head==NULL)        {        printf("分配失败，程序结束\n");        exit(-1);        }        p = head;        p->next=NULL;      */      if((fp=fopen("E:\\职工信息.txt","a"))==NULL)     {         printf("无法打开文件\n");         exit(-1);     }     p = head;     while(p!=NULL)     {         //fprintf(fp,"%s %s %s %s %s %s %s %s",p->num,p->name,p->sex,p->age,p->xueli,p->gongzi,p->adress,p->phone);         fprintf(fp,"%s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->age,p->xueli,p->gongzi,p->adress,p->phone);         p = p->next;     }     fclose(fp);     return head; }这个是in（）；这几个/*   */的地方有点懵，大佬能能否解释一下

user: user-2
content: 开始的 end=NULL只是初始化。没有意义。 em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL; // 弄出个空的头节点     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)    exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");         scanf("%s%s%s%s%s%s%s%s",p->num, p->name, p->sex, p->age, p->xueli, p->gongzi, p->adress, p->phone); // 这里都是字符串？ p的下面的那些属性都是字符串？          end->next = p; // 挂在end后面          end = p; // 更新end指针     }     end->next=NULL;  // 最后一个节点的next是NULL，表示到了队列尾巴了     head = in(head);   // 这是做啥呢？ 似乎没有意义啊。head一直就没有变过     return head; }  这串代码没有什么问题啊， 除了那个in（head）不知道要做什么。？ 你的疑问是什么东西。

user: user-0
content: 引用 4 楼 自信男孩 的回复：[quote=引用 2 楼 Tony.Lei 的回复:]  em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL;     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)             exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");     scanf("%s%s%s%s%s%s%s%s",p->num,p->name,p->sex,p->age,p->xueli,p->gongzi,p->adress,p->phone);         end->next = p;         end = p;     }     end->next=NULL;     head = in(head);     return head; } 这里的NULL有几个含义？ NULL是初始化结构体指针的指针域，这样用于遍历链表时有一个结束标识[/quote]开始end那个地方null是啥意思

user: user-0
content: 引用 3 楼 寻开心 的回复：不是必须有的 有它更方便而已。  可以让head指针一直有效， 否则空链表要判断head是否为空，插入的时候也要判断头指针是否存在麻烦一些麻烦大佬看一下上面的代码解释一下，我有点懵

user: user-3
content: 引用 2 楼 Tony.Lei 的回复:em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL;     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)             exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");     scanf("%s%s%s%s%s%s%s%s",p->num,p->name,p->sex,p->age,p->xueli,p->gongzi,p->adress,p->phone);         end->next = p;         end = p;     }     end->next=NULL;     head = in(head);     return head; } 这里的NULL有几个含义？ NULL是初始化结构体指针的指针域，这样用于遍历链表时有一个结束标识

user: user-2
content: 不是必须有的 有它更方便而已。  可以让head指针一直有效， 否则空链表要判断head是否为空，插入的时候也要判断头指针是否存在麻烦一些

user: user-0
content: em *append()//录入员工数据 {     int n,i;     em*p,*end = NULL;     if (!head) {         head = (em *)malloc(sizeof(em));         end = head;     }     printf("输入要录入员工的个数\n");     scanf("%d",&n);      for(i=0;i<n;i++)     {         p = (em*)malloc(sizeof(em));         if (!p)             exit(0);         printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");     scanf("%s%s%s%s%s%s%s%s",p->num,p->name,p->sex,p->age,p->xueli,p->gongzi,p->adress,p->phone);         end->next = p;         end = p;     }     end->next=NULL;     head = in(head);     return head; } 这里的NULL有几个含义？

user: user-4
content: 什么意思，指针域还是数据域，你说的是数据域吧，可以发下代码看看