C语言打印链表乱码,C语言链表输入打印多项式

C语言链表输入打印多项式

答案:1  信息版本:手机版

解决时间 2020-07-26 10:09

已解决

2020-07-25 12:39

#include

#include

typedef struct polynode

{

float coef;

int exp;

struct polynode *next;

}polynode,*link;

void creat_polynode(link h)

{

polynode *p;int i;

h=(link)malloc(sizeof(polynode));

h->next=NULL;

for(i=0;;i++)

{

p=(link)malloc(sizeof(polynode));

scanf("%d",&p->coef);

scanf("%d",&p->exp);

p->next=h->next;h->next=p;

if(p->coef==0&&p->exp==0)break;

}

}

void print_polynode(link h)

{

polynode *p;

for(p=h->next;p!=NULL;p=p->next)

{

printf("%dx^%d",p->coef,p->exp);

if(p->next!=NULL)

printf("+");

}

}

int main()

{

link a;

creat_polynode(a);

print_polynode(a);

return 0;

}

——————————————————————————————————————

打印时报错。错误停在

void print_polynode()

{

for(p=h->next;p!=NULL;p=p->next)

}

—————————————————————————————————————

那位好心人帮帮忙?

最佳答案

2020-07-25 13:34

你的 creat_polynode()是需要修改传人的指针的,那么应该使用指向指针的指针。如果你在main函数里link a=NULL;,那么在print_polynode()的时候,你会发现a还是等于NULL。

你的create函数可以采用以下任何一个。

int creat_polynode(link *h)

{

polynode *p;int i;

*h=(link)malloc(sizeof(polynode));

if(*h==NULL) return 0;

(*h)->next=NULL;

for(i=0;;i++)

{

p=(link)malloc(sizeof(polynode));

if(p==NULL) return 0;

scanf("%f",&p->coef);

scanf("%d",&p->exp);

p->next=(*h)->next;(*h)->next=p;

if(p->coef==0&&p->exp==0)break;

}

return 1;

}

link creat_polynode2()

{

polynode *h,*p;int i;

h=(link)malloc(sizeof(polynode));

if(h==NULL) return NULL;

h->next=NULL;

for(i=0;;i++)

{

p=(link)malloc(sizeof(polynode));

if(p==NULL) return NULL;

scanf("%f",&p->coef);

scanf("%d",&p->exp);

p->next=h->next;h->next=p;

if(p->coef==0&&p->exp==0)break;

}

return h;

}

注意:

1.你的coef是浮点数,输入采用%f格式,不是%d。在print里面也要用%f输出或%g自动有效浮点数输出。

2.使用malloc之后,最好判断分配是否成功,如果没成功,p->next这种操作就异常退出了,我们应该对这些采用主动处理。

3.包括2在内,所有指针,都需要检测其安全性。

全程序:

#include

#include

typedef struct polynode

{

float coef;

int exp;

struct polynode *next;

}polynode,*link;

int creat_polynode(link *h)

{

polynode *p;int i;

if(h==NULL) return 0;

*h=(link)malloc(sizeof(polynode));

if(*h==NULL) return 0;

(*h)->next=NULL;

for(i=0;;i++)

{

p=(link)malloc(sizeof(polynode));

if(p==NULL) return 0;

scanf("%f",&p->coef);

scanf("%d",&p->exp);

p->next=(*h)->next;(*h)->next=p;

if(p->coef==0&&p->exp==0)break;

}

return 1;

}

link creat_polynode2()

{

polynode *h,*p;int i;

h=(link)malloc(sizeof(polynode));

if(h==NULL) return NULL;

h->next=NULL;

for(i=0;;i++)

{

p=(link)malloc(sizeof(polynode));

if(p==NULL) return NULL;

scanf("%f",&p->coef);

scanf("%d",&p->exp);

p->next=h->next;h->next=p;

if(p->coef==0&&p->exp==0)break;

}

return h;

}

void print_polynode(link h)

{

polynode *p;

if(h==NULL) return;

for(p=h->next;p!=NULL;p=p->next)

{

printf("%gx^%d",p->coef,p->exp);

if(p->next!=NULL)

printf("+");

}

}

int main()

{

link a=NULL;

creat_polynode(&a);

print_polynode(a);

system("pause");

return 0;

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值