guhusf 发表于 2021-3-17 13:44:26

程序报错求修改

程序很长,但是运行只有四处报错,网上查了以后知道错因了但还是不知道怎么修改,求大佬帮助。

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
        char bn[]; //图书名字
        char num[] ;//图书编号
       
} STD;

typedef struct
{
        STD *data;//指向STD类型的指针变量
        int listSize;
        int length;
} SqList;
int inieSqList(SqList *L,int max)   //初始化
{
        L->data = (STD *)malloc(max *sizeof(STD));
        if(L->data == NULL)
        {
                printf("空间申请失败!\n");
                return 0;
        }
        L->listSize = max;
        L->length = 0;
        return 1;
}
int insertSqList(SqList *L, int i,STD x)        //插入操作
{
        int k;
        if(i < 1||i > L->length+1)
        {
                printf("插入位置异常!\n");
                return 0;
        }
        if(L->length >= L->listSize)
        {
                printf("容量不够!\n");
                return 0;
        }
        for(k = L->length;k >= i;k--)//向后移动一组数据
        {
                L->data = L->data;
       }
       L->data = x;                                //将待插入数据放入指定位置
       L->length = L->length + 1;         //长度加1
       return 1;
}

int deleteSqList(SqList *L ,int i, STD *x) //删除操作
{
        int k;
        if (L->length == 0)
        {
                printf("没有数据,不能删除!\n");
                return 0;
       }
       if (i <= 0 || i >L->length)
       {
               printf("位置异常!\n");
               return 0;
       }
       *x = L->data;
       for(k = i;k < L->length; k++)        //向前移动一组数据
       {
               L->data = L->data;
       }
       L->length = L->length - 1;
       return 1;
}

int locationSqList1(SqList L,char *x)//按书名查找
{
        int i;
        if(L.length == 0)
        {
                printf("没有数据!\n");
                return 0;
        }
        for(i = 0;i < L.length;i++)
        {
                if(strcmp(L.data.bn,x) == 0)
                return i + 1;
        }
        return 0;
}
int locationSqList2(SqList L,char *x)//按书号查找
{
        int i;
        if(L.length == 0)
        {
                printf("没有数据!\n");
                return 0;
        }
        for(i = 0;i < L.length;i++)
        {
                if(strcmp(L.data.num,x) == 0)
                return i + 1;
        }
        return 0;
}

int getSqList(SqList L,int i, STD *x)        //按指定位置查找
{
        if (L.length == 0)
        {
                printf("没有数据!\n");
                return 0;
        }
        if (i < 1 || i > L.length)
        {
                printf("位置不合理!\n");
                return 0;
        }
        *x = L.data;
        return 1;
}

int ListLength(SqList *L)        //求顺序表长度
{
    return (L->length);
}

int updateSqList(SqList L ,int i,STD x)                //修改成员
{
        if(L.length == 0)
        {
                printf("没有数据,不能更新!\n");
                return 0;
        }
        if(i<1||i>L.length)
        {
                printf("位置不合理!\n");
                return 0;
        }
        L.data = x;
        return 1;
}

int dispSqList(SqList L)                        //输出顺序表
{
        int i;
        if(L.length == 0)
        {
                printf("没有数据!\n");
                return 0;
        }
        for(i = 0;i<L.length;i++)
        {
                printf("%s %s \n",L.data.bn,L.data.num);
        }
        return 1;
}

int menu()                                                        //菜单功能
{
        int n;
        while(1)
        {
                system("cls");
                printf("****欢迎使用图书信息管理系统!****\n");
                printf("1.初始化空表        2.插入图书数据\n");
                printf("3.输出数据                4.删除数据\n");
                printf("5.书号查找                6.书名查找\n");
                printf("7.求表长                8.修改数据\n");
       }
}

main()
{
        int n,max;char num,bn;
        SqList L;STD s;
        while(1)
        {
                n = menu();                //显示主菜单
                        switch(n)
                {
                        case 1:inieSqList(L,max);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 2: printf("请输入要插入的图书编号和图书名,用空格隔开:\n");
                                        scanf("%s %s",s.num,s.bn);
                                        insertSqList(&L,L.length+1,s);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 3: printf("图书数据如下:\n");
                                        dispSqList(L);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 4: printf("请输入要删除的图书位置:\n");
                                        scanf("%d",n) ;
                                        deleteSqList(&L ,n, &s);
                                        printf("删除的数据为:%s %s\n",s.bn,s.num);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 5: printf("请输入要查找的图书编号:\n");
                                        scanf("%s",num);
                                        n = locationSqList2(L,num);
                                        if(n)
                                        printf("%s %s\n",L.data.bn,L.data.num);
                                        else printf("该编号不存在!\n");
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 6: printf("请输入要查找的书名:\n");
                                        scanf("%s",bn);
                                        n = locationSqList1(L,bn);
                                        if(n)
                                        printf("%s %s\n",L.data.bn,L.data.num);
                                        else printf("该编号不存在!\n");
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 7: printf("表长为: ");
                                        ListLength(L);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 8: printf("请输入要修改的图书名和图书编号,用空格隔开:\n");
                                        scanf("%s %s",s.bn,s.num);
                                        n = locationSqList1(L,s.bn);
                                        updateSqList(L,n,s);
                                  printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 0: exit(0);
                }
        }
}

jackz007 发表于 2021-3-17 13:44:27

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
      char bn; //图书名字
      char num ; //图书编号
      
} STD;

typedef struct
{
      STD *data;//指向STD类型的指针变量
      int listSize;
      int length;
} SqList;
int inieSqList(SqList *L,int max)   //初始化
{
      L->data = (STD *)malloc(max *sizeof(STD));
      if(L->data == NULL)
      {
                printf("空间申请失败!\n");
                return 0;
      }
      L->listSize = max;
      L->length = 0;
      return 1;
}
int insertSqList(SqList *L, int i,STD x)      //插入操作
{
      int k;
      if(i < 1||i > L->length+1)
      {
                printf("插入位置异常!\n");
                return 0;
      }
      if(L->length >= L->listSize)
      {
                printf("容量不够!\n");
                return 0;
      }
      for(k = L->length;k >= i;k--)//向后移动一组数据
      {
                L->data = L->data;
         }
         L->data = x;                              //将待插入数据放入指定位置
         L->length = L->length + 1;         //长度加1
         return 1;
}

int deleteSqList(SqList *L ,int i, STD *x) //删除操作
{
      int k;
      if (L->length == 0)
      {
                printf("没有数据,不能删除!\n");
                return 0;
         }
         if (i <= 0 || i >L->length)
         {
               printf("位置异常!\n");
               return 0;
         }
         *x = L->data;
         for(k = i;k < L->length; k++)      //向前移动一组数据
         {
               L->data = L->data;
         }
         L->length = L->length - 1;
         return 1;
}

int locationSqList1(SqList L,char *x)//按书名查找
{
      int i;
      if(L.length == 0)
      {
                printf("没有数据!\n");
                return 0;
      }
      for(i = 0;i < L.length;i++)
      {
                if(strcmp(L.data.bn,x) == 0)
                return i + 1;
      }
      return 0;
}
int locationSqList2(SqList L , char * x)//按书号查找
{
      int i;
      if(L.length == 0)
      {
                printf("没有数据!\n");
                return 0;
      }
      for(i = 0;i < L.length;i++)
      {
                if(strcmp(L.data.num,x) == 0)
                return i + 1;
      }
      return 0;
}

int getSqList(SqList L,int i, STD *x)      //按指定位置查找
{
      if (L.length == 0)
      {
                printf("没有数据!\n");
                return 0;
      }
      if (i < 1 || i > L.length)
      {
                printf("位置不合理!\n");
                return 0;
      }
      *x = L.data;
      return 1;
}

int ListLength(SqList *L)      //求顺序表长度
{
    return (L->length);
}

int updateSqList(SqList L ,int i,STD x)                //修改成员
{
      if(L.length == 0)
      {
                printf("没有数据,不能更新!\n");
                return 0;
      }
      if(i<1||i>L.length)
      {
                printf("位置不合理!\n");
                return 0;
      }
      L.data = x;
      return 1;
}

int dispSqList(SqList L)                        //输出顺序表
{
      int i;
      if(L.length == 0)
      {
                printf("没有数据!\n");
                return 0;
      }
      for(i = 0;i<L.length;i++)
      {
                printf("%s %s \n",L.data.bn,L.data.num);
      }
      return 1;
}

int menu()                                                      //菜单功能
{
      char c                                        ;
      system("cls");
      printf("****欢迎使用图书信息管理系统!****\n");
      printf("1.初始化空表      2.插入图书数据\n");
      printf("3.输出数据          4.删除数据\n")    ;
      printf("5.书号查找          6.书名查找\n")    ;
      printf("7.求表长            8.修改数据\n")    ;
      printf("0.退出\n")                            ;
      fflush(stdin)                                 ;
      while((c = getch()) < '0' || c > '8')         ;
      return c - '0'                              ;
}

int main(void)
{
      int n,max               ;
      char num , bn ;
      SqList L;STD s          ;
      while(1)
      {
                n = menu();                //显示主菜单
                        switch(n)
                {
                        case 1:inieSqList(& L , max)             ;
                                        printf("按任意键继续!\n") ;
                                        getch();
                                        break;
                        case 2: printf("请输入要插入的图书编号和图书名,用空格隔开:\n");
                                        scanf("%s %s",s.num,s.bn);
                                        insertSqList(&L,L.length+1,s);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 3: printf("图书数据如下:\n");
                                        dispSqList(L);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 4: printf("请输入要删除的图书位置:\n");
                                        scanf("%d",n) ;
                                        deleteSqList(&L ,n, &s);
                                        printf("删除的数据为:%s %s\n",s.bn,s.num);
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 5: printf("请输入要查找的图书编号:\n");
                                        scanf("%s",num);
                                        n = locationSqList2(L,num);
                                        if(n)
                                        printf("%s %s\n",L.data.bn,L.data.num);
                                        else printf("该编号不存在!\n");
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 6: printf("请输入要查找的书名:\n");
                                        scanf("%s",bn);
                                        n = locationSqList1(L,bn);
                                        if(n)
                                        printf("%s %s\n",L.data.bn,L.data.num);
                                        else printf("该编号不存在!\n");
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 7: printf("表长为: ");
                                        ListLength(& L) ;
                                        printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 8: printf("请输入要修改的图书名和图书编号,用空格隔开:\n");
                                        scanf("%s %s",s.bn,s.num);
                                        n = locationSqList1(L,s.bn);
                                        updateSqList(L,n,s);
                                    printf("按任意键继续!\n");
                                        getch();
                                        break;
                        case 0: exit(0);
                }
      }
}

followzcj 发表于 2021-3-17 14:50:25

前排围观至尊会员{:10_277:}

Minecraft程序猿 发表于 2021-5-4 13:54:24

60币...
页: [1]
查看完整版本: 程序报错求修改