所以这是在获取两个多项式之后添加的片段。我尝试显示总和的最后一部分是我陷入困境的地方。我不能得到的是为什么不应该使用while循环。有人可以帮忙吗?! PS:函数是我在这里无法使用的东西......由于问题的要求而导致的一些其他限制。 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("\n\nThe sum is\n");
while(p3!=NULL) {
printf("%3.2f X^%d + ",p3->c,p3->e);
p3 = p3->next;
}
getch();
}
答案 0 :(得分:0)
执行此操作时:
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;