C语言链表编译错误,求高手帮解决。

2025-02-24 11:59:45
推荐回答(3个)
回答1:

#include 
#include 
#define NULL 0
#define LEN sizeof(struct  student)
struct student{
    long num;
    int score;
    struct student *next;
};
struct student listA,listB;
int n,sum=0;

main()
{
    struct student *creat(void); //函数申明
    struct student *insert(struct student*,struct student*);//函数申明
    void print(struct student*); //函数申明
    struct student *ahead,*bhead,*abh;

    printf("\nInput list a:\n");
    ahead=creat(); //调用creat函数,输入链表a
    sum=sum+n;

    printf("Input list b:\n");
    bhead=creat(); //调用creat函数,输入链表b
    sum=sum+n;

    abh=insert(ahead,bhead); //调用insert函数,将两表合并
    print(abh); //输出合并后的链表
}

struct student *creat(void) //建立链表的函数
{
    struct student *p1,*p2,*head;

    n=0;
    p1=p2=(struct student *)malloc(LEN);
    printf("Input number & scores of student:\n");
    printf("If number is 0,stop inputing.\n");
    scanf("%ld,%d",&p1->num,&p1->score);

    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
        {
            head=p1;
        }
        else
        {
            p2->next=p1;
        }
        p2=p1;
        p1=(struct student *)malloc(LEN);
        scanf("%ld,%d",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return(head);
}

struct student *insert(struct student *ah,struct student*bh)//定义insert函数,用来合并两个链表
{
    struct student *pa1,*pa2,*pb1,*pb2;
    pa2=pa1=ah;
    pb2=pb1=bh;
    do
    {
        while((pb1->num>pa1->num)&&(pa1->next!=NULL))
        {
            pa2=pa1;
            pa1=pa1->next;
        }
        if(pb1->num<=pa1->num)
        {
            if(ah==pa1)
            {
                ah=pb1;
            }
            else
            {
                pa2->next=pb1;
            }
            pb1=pb1->next;
            pb2->next=pa1;
            pa2=pb2;
            pb2=pb1;
        }
    }while((pa1->next!=NULL)||(pa1==NULL&&pb1!=NULL));

    if((pb1->num>pa1->num)&&(pa1->next==NULL))
    {
        pa1->next=pb1;
    }
    return(ah);
}    //这里少一个大括号

void print(struct student *head) //输出函数
{
    struct student *p;
    printf("\n There are %d records:\n",sum);
    p=head;
    if(p!=NULL)
    {
        do
        {
            printf("%ld%d\n",p->num,p->score);
            p=p->next;
        }while(p!=NULL);
    }
}

倒数第二个函数最后少个大括号

回答2:

你这太乱了,能否直接截图

回答3:

排下版吧,这叫人怎么看啊。