大家帮帮忙,一道C++/C小题错在哪里,该怎么处理

大家帮帮忙,一道C++/C小题错在哪里
< <一道数据结构题目> > 关于用链表实现多项式相加并输出显示:
本人写的是用户按指数降幂输入多项式各项,并且按照指数降序排列输出多项式;   程序功能要求能够完成两个多项式的相加、相减,并将结果输出显示。
比如两个多项式
a:3*x^5+6*x^2+5
b:4*x^7-6*x^2+x
相加后结果应该输出:4*x^7+3*x^5+x+5
C和VC环境下均是编译没有错误,但是无法运行得到结果,请大家帮帮找一下错误,谢谢。
下面是我的程序:

#include <stdio.h>
#include <malloc.h>
#define   LEN   sizeof(struct   Polynomial)
struct   Polynomial
  {   float   coef;
int   expn;
struct   Polynomial   *   next;
  };
  int   n=0,sum=0;
  int   cmp(int   a,int   b)
  {
  int   flag;
  if(a <b)   flag=-1;
  else   if(a> b)
  flag=1;
  else   flag=0;
  return   flag;
  }
  struct   Polynomial   *   creat(void)
  {
  struct   Polynomial   *   head;
  struct   Polynomial   *   p1,*   p2;
  p1=p2=(struct   Polynomial   *)malloc(LEN);
  scanf( "%f,%d ",&p1-> coef,&p1-> expn);
  head=NULL;
  while(p1-> coef!=0)
  {
  n++;
  if(n==1)   head=p1;
  else   p2-> next=p1;
  p2=p1;
  p1=(struct   Polynomial   *)malloc(LEN);
  scanf( "%f,%d ",&p1-> coef,&p1-> expn);
  }
  p2-> next=NULL;
  return(head);
  }


  struct   Polynomial   *   add(struct   Polynomial   *ah,struct   Polynomial   *bh)
  {
  struct   Polynomial   *pa1,*pa2,*pb1,*pb2,*p0,*head;
  float   sumcoef;
  pa1=ah;
  head=pb1=bh;
  pa2=pa1-> next;
  pb2=pb1-> next;
  while(pa2&&pb2)
    {
 
    switch(cmp(pa2-> expn,pb2-> expn))
{
case   -1:
pb2=pb2-> next;break;
case   0   :sumcoef=pa2-> coef+pb2-> coef;
if(sumcoef!=0.0){
pb2-> coef=sumcoef;
pa2=pa2-> next;
pb2=pb2-> next;
}
else   {pa2=pa2-> next;
pb1-> next=pb2-> next;
pb2=pb2-> next;}
break;
case   1:
p0=pa2-> next;
pa2-> next=pb2;
pb1-> next=pa2;
pa2=p0;
pb2=pb2-> next;
break;
}
    }
  while(pa2   &&   !pb2)
  pb2-> next=pa2;
  return(head);
  }
  void   display(struct   Polynomial   *   head)
  {
  struct   Polynomial   *   p;
  printf( "The   combinated   Polynomial   is:\n ");
  p=head;
  {
  if(p==NULL)
    printf( "0 ");/*如果链表为空,输出0*/
  else
    while(p-> next!=NULL)/*否则,当其下一个结点不为空时*/
      {
        {
          if(p-> expn==0)
            {
if(p-> coef> 0)
printf( "%f+ ",p-> coef);
else
printf( "\b%f+ ",p-> coef);/*否则,退一格(消除前面的+号),输出系数*/
            }
            else
              if(p-> expn==1)/*否则,如果指数为1*/
              {