这是在接受两个多项式后进行加法的片段。它的最后一部分,我试图显示总和的地方,是我陷入困境的地方。我不明白为什么while循环不起作用。有人能帮忙吗?!附言:函数是我不能在这里使用的东西。。由于问题的要求而产生的其他一些限制。PPS:我也知道你可能会认为这是一个非常基本的程序,相信我,当我说我知道这是……但我真的需要帮助来复习这些基本技能,任何帮助都将不胜感激。
struct poly
{ int e;float c;
struct poly *next;
};
typedef struct poly node;
r = (node*)malloc(sizeof(node)); //r is a node of structure
p3 = r;
if((p3 == NULL) || (r == NULL)) { printf("insuf mem");return;}
while ( (p1!=NULL) && (p2!=NULL) ) {
if( p1->e == p2->e) {
r->e = p1->e;
r->c = (p1->c) + (p2->c);
p1 = p1->next;
p2 = p2->next;
r->next = (node*)malloc(sizeof(node));
r = r->next;
}
else if ( (p1->e) > (p2->e) ) {
r->e = p1->e;
r->c = p1->c;
p1 = p1->next;
r->next = (node*)malloc(sizeof(node));
r = r->next;
}
else {
r->e = p2->e;
r->c = p2->c;
p2 = p2->next;
r->next = (node*)malloc(sizeof(node));
r = r->next;
}
/* if( (p1 == NULL)&&(p2==NULL) )
r->next=NULL;
else
r = r->next;*/
}
while (p1!=NULL)
{
r->e = p1->e;
r->c = p1->c;
p1 = p1->next;
r->next = (node*)malloc(sizeof(node));
r = r->next;
/*if(p1!=NULL)
r = r->next;
else r->next=NULL;*/
}
while (p2!=NULL)
{
r->e = p2->e;
r->c = p2->c;
p2 = p2->next;
r->next = (node*)malloc(sizeof(node));
r = r->next;
/* if(p2!=NULL)
r = r->next;
else r->next=NULL;*/
}
r=NULL;
printf("nnThe sum isn");
while(p3!=NULL) {
printf("%3.2f X^%d + ",p3->c,p3->e);
p3 = p3->next;
}
getch();
}
执行此操作时:
r->next = malloc(sizeof(node));
r = r->next;
问问自己r
的内容是什么:
r->e = ?;
r->c = ?;
r->next = ?; // Important!
答案是r
的内容未知/未定义。由于这将是链接列表中从p3
开始的最后一个节点,并且r->next
不太可能恰好是NULL
,因此您的列表没有"结束"。
要修复此问题,您需要初始化所有新节点的内容,如:
r->next = malloc(sizeof(node));
r = r->next;
r->next = NULL; //Initialize new node at end of list
r->c = 0;
r->e = 0;