C - 为什么这个多项式加法不起作用?



这是在接受两个多项式后进行加法的片段。它的最后一部分,我试图显示总和的地方,是我陷入困境的地方。我不明白为什么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;

相关内容

  • 没有找到相关文章

最新更新