为什么多项式相乘得不到

#include "pol.h"
void show(Data item);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
polynomial p1,p2,answer;
Initialize(&p1);
while(getchar()=='a')
{
getchar();
Data temp;
printf("please input the term:\n");
scanf("%d%d",&temp.cofficient,&temp.exponent);
getchar();
additem(temp,&p1);
}
traverse(&p1,show);
Initialize(&p2);
while(getchar()=='a')
{
getchar();
Data temp;
printf("please input the term:\n");
scanf("%d%d",&temp.cofficient,&temp.exponent);
getchar();
additem(temp,&p2);
}
traverse(&p2,show);
printf("\n");
answer=multiply(&p1,&p2);
traverse(&answer,show);
return 0;
}
void show(Data item)
{
printf("%dx^%d ",item.cofficient,item.exponent);
}

#include
#include"pol.h"
void Initialize(polynomial*p2p)
{
p2p=NULL;
}
bool polynomialIsEmpty(const polynomial*p2p)
{
if(*p2p==NULL)
return true;
else
return false;
}
bool polynomialIsFull(const polynomial*p2p)
{
bool full;
Node
pt;
pt=(Node*)malloc(sizeof(Node));
if(pt==NULL)
full=true;
else
full=false;
free(pt);
return full;
}
bool additem(Data item,polynomial*p2p)
{
Node pnew;
Node *scan=*p2p;
pnew=(Node
)malloc(sizeof(Node));
if(pnew==NULL)
return false;
copyToNode(item,pnew);
pnew->next=NULL;
if(*p2p==NULL)
*p2p=pnew;
else
{
while(scan->next)
scan=scan->next;
scan->next=pnew;
}
return true;
}
void traverse(const polynomial*p2p,void(*pfun)(Data item))
{
Node*scan=*p2p;
while(scan)
{
(*pfun)(scan->data);
scan=scan->next;
}
}
static void copyToNode(Data item,Node*p)
{
p->data=item;
}
polynomial polyadd(polynomial*p1,polynomial*p2)
{
Data temp;
polynomial answer=NULL;
Node*scan1=*p1;
Node*scan2=*p2;
while(scan2)
{
if(scan2->data.exponent>scan1->data.exponent)
{
additem(scan2->data,&answer);
scan2=scan2->next;
}

else if(scan2->data.exponentdata.exponent)
{
additem(scan1->data,&answer);
scan1=scan1->next;
}
else
{
temp.cofficient=scan1->data.cofficient+scan2->data.cofficient;
temp.exponent=scan1->data.exponent;
additem(temp,&answer);
scan1=scan1->next;
scan2=scan2->next;
}
}
while(scan1)
{
additem(scan1->data,&answer);
scan1=scan1->next;
}
return answer;
}
polynomial multiply(polynomial*p1,polynomial*p2)
{
Data temp;
polynomial answer=NULL;
Node*scan1=*p1;
Node*scan2=*p2;
while(scan1)
{
while(scan2)
{
temp.cofficient=scan1->data.cofficient*scan2->data.cofficient;
temp.exponent=scan1->data.exponent+scan2->data.exponent;
if(answer==NULL)
additem(temp,&answer);
else
{
Node*scan_answer=answer;
while(scan_answer)
{
if(scan_answer->next==NULL&&scan_answer->data.exponent!=temp.exponent)
additem(temp,&answer);
if(scan_answer->data.exponent==temp.exponent)
{
scan_answer->data.cofficient+=temp.cofficient;
break;
}
scan_answer=scan_answer->next;
}
}

scan2=scan2->next;
}
scan2=*p2;
scan1=scan1->next;
}

return answer;
}

typedef struct{
int cofficient;
int exponent;
}Data;
typedef struct node{
Data data;
struct node*next;
}Node;
typedef Node* polynomial;
void Initialize(polynomial*);
bool polynomialIsEmpty(const polynomial*);
bool polynomialIsFull(const polynomial*);
bool additem(Data,polynomial*);
void traverse(const polynomial*,void(*pfun)(Data));
static void copyToNode(Data,Node*);
polynomial polyadd(polynomial*,polynomial*);
polynomial multiply(polynomial*,polynomial*);