Math Dash 2021-07-29 19:06 采纳率: 92.8%
浏览 168
已结题

这个代码,总是显示[Error] dereferencing pointer to incomplete type,怎么修改?

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    double a;
    double b;
}Elemtype;
typedef struct
{
    Elemtype datas;
    struct LNode* prior;
    struct LNode* next;
}LNode,*LinkList;
void ListInsert(LinkList *a)
{
    *a=(LNode*)malloc(sizeof(LNode));
    (*a)->next=NULL;
    (*a)->prior=NULL;
}
int main(int argc, char *argv[])
{
    LinkList a0;
    ListInsert(&a0);
    for(;;)
    {
        puts("1.【退        出】\n2.【插        入】\n3.【从前往后查询】\n4.【从后往前查询】");
        char a[500];
        for(;;)
        {
            gets(a);
            if((strcmp(a,"1")==0)||(strcmp(a,"2")==0)||(strcmp(a,"3")==0)||(strcmp(a,"4")==0))\
            {
                break;
            }
            else if(strlen(a)==0)
            {
                printf("内容不能为空!");
            }
            else
            {
                printf("输入错误!请重新输入!");
            }
            printf("重新输入的内容为:");
        }
        if(strcmp(a,"2")==0)
        {
            Elemtype e;
            GetsList(&e);
            int b;
            double c;
            puts("请输入位置");
            while((scanf("%lf",&c)!=1)||((int)c!=c))
            {
                getchar();
                fflush(stdin);
                printf("输入错误!请重新输入!重新输入的内容为:");
            }
            b=(int)c;
            ListInsert2(&a0,b,e);
        }
        if(strcmp(a,"3")==0)
        {
            PutsList(&a0);
        }
        if(strcmp(a,"4")==0)
        {
            FputsList(&a0);
        }
        system("pause");
        if(strcmp(a,"1")==0)
        {
            return;
        }
    } 
    return 0;
}
void FputsList(LinkList *L)
{
    LinkList a;
    a=(*L)->next;
    if(!a)
    {
        printf("无信息\n");
        return;
    }
    while(a->next)
    {
        a=a->next;
    }
    int s=0;
    while(a)
    {
        s++;
        printf("%d:%lf\t%lf\n",s,a->datas.a,a->datas.b);
        a=a->next;
    }
}
void PutsList(LinkList *L)
{
    LinkList a;
    a=(*L)->next;
    if(!a)
    {
        puts("无信息");
        return;
    }
    int s=0;
    while(a)
    {
        s++;
        printf("%d:%lf\t%lf\n",s,a->datas.a,a->datas.b);
        a=a->next;
    }
}
void ListInsert2(LinkList *L,int a,Elemtype e)
{
    LinkList k;
    k=*L;
    int j=0;
    while(k&&(j<a-1))
    {
        k=k->next;
    }
    if((!k)||(j>a-1))
    {
        printf("插入失败!");
        return;
    }
    LinkList o;
    o=(LNode*)malloc(sizeof(LNode));
    o->datas=e;
    o->prior=k->prior;
    k->prior->next=o;
    o->next=k;
    k->prior=o;
}
void GetsList(Elemtype *e)
{
    puts("请输入第一个数");
    double a0,b0;
    while(scanf("%lf",&a0)!=1)
    {
        getchar();
        fflush(stdin);
        printf("输入错误,请重新输入,重新输入的内容为:");
    }
    puts("请输入第二个数");
    while(scanf("%lf",&b0)!=1)
    {
        getchar();
        fflush(stdin);
        printf("输入错误,请重新输入,重新输入的内容为:");
    }
    e->a=a0;
    e->b=b0;
}

file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/QQ/Temp/W68)X]ALRB$[MG[[@%25GR)66.png

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-07-29 20:28
    关注

    代码修改如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct
    {
        double a;
        double b;
    }Elemtype;
    typedef struct LNode
    {
        Elemtype datas;
        struct LNode* prior;
        struct LNode* next;
    }*LinkList;
    
    void FputsList(LinkList *L);
    void PutsList(LinkList *L);
    void ListInsert2(LinkList *L,int a,Elemtype e);
    void GetsList(Elemtype *e);
    
    void ListInsert(LinkList *a)
    {
        *a=(LNode*)malloc(sizeof(LNode));
        (*a)->next=NULL;
        (*a)->prior=NULL;
    }
    int main(int argc, char *argv[])
    {
        LinkList a0;
        ListInsert(&a0);
        for(;;)
        {
            puts("1.【退        出】\n2.【插        入】\n3.【从前往后查询】\n4.【从后往前查询】");
            char a[500];
            for(;;)
            {
                gets(a);
                if((strcmp(a,"1")==0)||(strcmp(a,"2")==0)||(strcmp(a,"3")==0)||(strcmp(a,"4")==0))\
                {
                    break;
                }
                else if(strlen(a)==0)
                {
                    printf("内容不能为空!");
                }
                else
                {
                    printf("输入错误!请重新输入!");
                }
                printf("重新输入的内容为:");
            }
            if(strcmp(a,"2")==0)
            {
                Elemtype e;
                GetsList(&e);
                int b;
                double c;
                puts("请输入位置");
                while((scanf("%lf",&c)!=1)||((int)c!=c))
                {
                    getchar();
                    fflush(stdin);
                    printf("输入错误!请重新输入!重新输入的内容为:");
                }
                b=(int)c;
                ListInsert2(&a0,b,e);
            }
            if(strcmp(a,"3")==0)
            {
                PutsList(&a0);
            }
            if(strcmp(a,"4")==0)
            {
                FputsList(&a0);
            }
            system("pause");
            if(strcmp(a,"1")==0)
            {
                return 0;
            }
        } 
        return 0;
    }
    void FputsList(LinkList *L)
    {
        LinkList a;
        a=(*L)->next;
        if(!a)
        {
            printf("无信息\n");
            return;
        }
        while(a->next)
        {
            a=a->next;
        }
        int s=0;
        while(a)
        {
            s++;
            printf("%d:%lf\t%lf\n",s,a->datas.a,a->datas.b);
            a=a->next;
        }
    }
    void PutsList(LinkList *L)
    {
        LinkList a;
        a=(*L)->next;
        if(!a)
        {
            puts("无信息");
            return;
        }
        int s=0;
        while(a)
        {
            s++;
            printf("%d:%lf\t%lf\n",s,a->datas.a,a->datas.b);
            a=a->next;
        }
    }
    void ListInsert2(LinkList *L,int a,Elemtype e)
    {
        LinkList k;
        k=*L;
        int j=0;
        while(k&&(j<a-1))
        {
            k=k->next;
        }
        if((!k)||(j>a-1))
        {
            printf("插入失败!");
            return;
        }
        LinkList o;
        o=(LNode*)malloc(sizeof(LNode));
        o->datas=e;
        o->prior=k->prior;
        k->prior->next=o;
        o->next=k;
        k->prior=o;
    }
    void GetsList(Elemtype *e)
    {
        puts("请输入第一个数");
        double a0,b0;
        while(scanf("%lf",&a0)!=1)
        {
            getchar();
            fflush(stdin);
            printf("输入错误,请重新输入,重新输入的内容为:");
        }
        puts("请输入第二个数");
        while(scanf("%lf",&b0)!=1)
        {
            getchar();
            fflush(stdin);
            printf("输入错误,请重新输入,重新输入的内容为:");
        }
        e->a=a0;
        e->b=b0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月23日
  • 创建了问题 7月29日