高手帮忙看个程序,链表方面的

我是学友 2011-07-20 11:24:58
这段程序是我写的打算实现如下目的:读取test.txt文件,文件内容格式为name,age,pay 然后将文件里面的数据按字符串读出来临时存放在一个数组里,然后在建立一个链表,将临时存放的字符串解析后存放在链表里,然后输出,现在先实现整型的age和pay输出,没有name,现在的问题是,调试的时候在执行到show()这个函数时,链表头指针head为空,我搞不清楚哪里出了问题,是链表创建失败??高手帮忙看一下
#include <string.h> 
#include <stdio.h>

#define L sizeof(struct yuan)

struct yuan //将文件读出后存放的结构体
{
// char *string;
int age;
int pay;
struct yuan *next;
};
int n;
struct str //用于临时存放读取文件的字符串
{
char _str[25];
}X[5];

analysis_creat() //解析文件,创建链表
{
int i,j,a[5],b[5];
char *p=NULL,*buffer=NULL,*delims={","};
struct yuan *head,*p1,*p2;

head=NULL;
p1=p2=NULL;
n=0;
p1=p2=(struct yuan *)malloc(L);
for(i=0;i<5;i++)
{
n=n+1;
if(n=1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct yuan *)malloc(L);

buffer=strdup(X[i]._str);
p=strtok(buffer,delims); //name子串

p=NULL;
p=strtok(NULL,delims); //age字串
p1->age=atoi(p);
printf("%d ",p1->age);

p=NULL;
p=strtok(NULL,delims); //pay字串
p1->pay=atoi(p);
printf("%d ",p1->pay);
printf("\n");
}
p2->next=NULL;
return(head);
}

void show(struct yuan *head) //链表遍历输出函数
{
struct yuan *p;
if(head==NULL) printf("链表为空,没有数据\n");
else printf("\n链表的数据元素为:\n");
for(p=head;p!=NULL;p=p->next)
printf("%d %d",p->age,p->pay);
printf("\n");
}

int main(int argc,char **argn)
{
struct yuan *h1;
int i,*p,j;
FILE *fp;
h1=NULL;
fp=fopen("test.txt","r");
for(i=0;i<5&&!feof(fp);i++)
fscanf(fp,"%s ",X[i]._str);
printf("\n");
analysis_creat();
show(h1);
fclose(fp);
return 0;
}
...全文
151 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是学友 2011-07-20
  • 打赏
  • 举报
回复
谢谢楼上各位,结贴了
至善者善之敌 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]
当然是空的,代码其实就是
h1=NULL;
show(h1);
[/Quote]

+++1正解
kevin_zlg 2011-07-20
  • 打赏
  • 举报
回复
h1=NULL;
analysis_creat();
show(h1);
你的链表创建和h1指针都没有关系的,第二句后h1还是NULL
你要把h1传进去,然后当做链表头,最后再返回回去
ouyh12345 2011-07-20
  • 打赏
  • 举报
回复
当然是空的,代码其实就是
h1=NULL;
show(h1);

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧