请问这个顺序表管理系统怎么修改

请问这个顺序表写的图书信息管理系统怎么修改,目前调试出来问题在insert

//////////////////////////////////////////////////////////////////////////
//(1)编译预处理命令
#include "stdio.h"
#include "stdlib.h"//分配内存 
#include "conio.h"
#include "string.h"
//////////////////////////////////////////////////////////////////////////
//(2)自定义数据类型(typedef)
//先定义图书数据的数据类型
typedef struct {
   int no;//number
   char name[32];//name
   float price;//price
}STD;
//再定义顺序表数据类型:
typedef  struct {
STD *data; //data是一个指向STD类型的指针变量
int  listSize;//表容量 
int  length;//实际数据个数 
}SQList;
//////////////////////////////////////////////////////////////////////////
//(3)各个函数的声明
int menu();
int initSqList(SQList *L,int max);//初始化 
int dispSqList(SQList L);
int insertSqList(SQList *L, int i, STD x);
int deleteSqList(SQList *L, int i, STD *x);
int locateSqList(SQList L, STD x);
int updateSqList(SQList L, int i, STD x);
int createSqList(SQList *L,int max,STD x);
//////////////////////////////////////////////////////////////////////////
//(4)主函数的定义
int main()
{
    int t=1,n, maxSize;// float fs=.0f;有时候不做这个浮点初始化操作程序会报错
    SQList L;STD s;


    while(t){
        n=menu( );//显示主菜单 
        switch(n){
        //初始化图书数据
        case 1:
            printf("请输入需要创建的图书数量:");
            scanf("%d",&maxSize);
            initSqList(&L, maxSize);

            break;

        //插入图书数据
        case 2:
            printf("请输入需要插入图书的编号、书名、价格,用空格隔开:\n");
            scanf("%d%s%f",&s.no,s.name, &s.price);
            int pos;
            printf("请输入插入位置:\n");
            scanf("%d",&pos);
            insertSqList(&L,pos,s);
            break;

        //删除图书数据
        case 3:
            printf("请输入删除图书书名:\n");
            scanf("%s",s.name);
            pos=locateSqList(L,s);
            if(pos==L.length+1) 
                printf("不存在该图书数据\n");
            else
            {
                deleteSqList(&L, pos, &s);
                printf("删除的图书数据为:%d %10s %7.2f\n", s.no,s.name, s.price);
            }

            break;

        //显示图书数据
        case 4:
            dispSqList(L);
            break;

        //更新图书数据
        case 5:
            printf("请输入需要修改的图书编号、名称、价格,用空格隔开:\n");
            scanf("%d%s%f",&s.no,s.name,&s.price);
            n=locateSqList(L,s);
            updateSqList(L,n,s);
        
            break;
        case 6:
            createSqList(&L,maxSize,s);
            break;

        //退出
        case 0:
            t = 0;
            break;

        //错误处理
        default: 
            printf("输入有误!\n");

        }
    }

}
//////////////////////////////////////////////////////////////////////////
//(5)各个函数的定义
int menu(){
    int n;
    //system("cls");//清屏
    printf("****welcome to book management system****\n");
    printf("   1、initialize    2、insert\n");
    printf("   3、delete        4、display\n");
    printf("   5、update        6、create\n");
    printf("   7、exit\n");
    printf("*****************************************\n");
    printf("choose function(0-6):");
    scanf("%d",&n);
    return n;
}

//初始化操作:1.分配内存 2.给结构体变量赋值(length,listsize) 
 
int initSqList(SQList *L,int max){
    L->data=(STD*)malloc(max*sizeof(STD));
    if(L->data=NULL){
        printf("申请内存失败!");
        exit(0);
    }
    L->listSize=max;
    L->length=0;
    return 1;
}
int dispSqList(SQList L){
    if(L.data=0){
        printf("没有信息!");
    }
    printf("编号 书名 价格\n ");
    printf("%d",L.length);
    for(int i=0;iprintf("%d %s %f\n",L.data[i].no,L.data[i].name,L.data[i].price);
    }
    return 1;
}
int insertSqList(SQList *L, int i, STD x){
    if(i<1){
        printf("1error");
        return 0;
    }
    if(L->length>=L->listSize){
        printf("2error");
        return 0;
    }
    if(L->length=0){
        L->data[L->length]=x;
        ++L->length;
        return 1;
    }
    printf("%d",L->length);
    /*else {
        for(int k=L->length;k>=i-1;k--){
        L->data[k+1]=L->data[k];
    }
    L->data[i-1]=x;
    ++L->length;
    return 1;
    }*/
}
int deleteSqList(SQList *L, int i, STD *x){
    if(i<1||i>L->length)return 0;
    if(L->listSize>=L->length)return 0;
    *x=L->data[i-1];
    for(int k=i-1;klength;k++){
        L->data[k]=L->data[k+1];        
    }
    L->length=L->length-1;
    return 1;
}

int locateSqList(SQList L, STD x){
    if(L.length==0)return 0;
    for(int i=0;i1;i++){
        if(strcmp(L.data[i].name,x.name)==0&&L.data[i].no==x.no&&L.data[i].price==x.price)return i+1;
    }
}
int updateSqList(SQList L, int i, STD x){
    if(i<1||i>L.length-1)return 0;
    if(L.length==0)return 0;
    L.data[i-1]=x;
    return 1;
}
int createSqList(SQList *L,int maxSize,STD x){
    int n=0;
    char c;
    initSqList(L, maxSize);
    for(int i=0;iprintf("input %d\n",i+1);
        scanf("%d%s%f",&x.no,x.name,&x.price);
        getchar();
        insertSqList(L,++i,x);
    }
    return 1;
}


修改完善如下,供参考:

//////////////////////////////////////////////////////////////////////////
//1)编译预处理命令
#include "stdio.h"
#include "stdlib.h"//分配内存
#include "conio.h"
#include "string.h"
#define  MaxSize  100     // 修改
//////////////////////////////////////////////////////////////////////////
//2)自定义数据类型(typedef)
//先定义图书数据的数据类型
typedef struct {
    int   no;//number
    char  name[32];//name
    float price;//price
}STD;
//再定义顺序表数据类型:
typedef  struct {
    STD  *data; //data是一个指向STD类型的指针变量
    int  listSize;//表容量
    int  length;//实际数据个数
}SQList;
//////////////////////////////////////////////////////////////////////////

//3)各个函数的声明
int menu();
int initSqList(SQList *L);//初始化 int initSqList(SQList *L,int max); 修改
int dispSqList(SQList L);
int insertSqList(SQList *L, int i, STD x);
int deleteSqList(SQList *L, int i);
int locateSqList(SQList L, STD x);
int updateSqList(SQList L, int i,  STD x);
int createSqList(SQList *L);//int createSqList(SQList *L,int max,STD x); 修改
//////////////////////////////////////////////////////////////////////////

//4)主函数的定义
int main()
{
    int t=1,n, maxSize;// float fs=.0f;有时候不做这个浮点初始化操作程序会报错
    SQList L; STD s;
    initSqList(&L);    //修改 初始化图书数据表
    while(t){
        n=menu( );//显示主菜单
        switch(n){
        case 1:
            createSqList(&L);  //修改
            break;

        //插入图书数据
        case 2:
            printf("请输入需要插入图书的编号、书名、价格,用空格隔开:\n");
            scanf("%d%s%f",&s.no,s.name, &s.price);
            int pos;
            printf("请输入插入位置:\n");
            scanf("%d",&pos);
            insertSqList(&L,pos,s);
            break;

        //删除图书数据
        case 3:
            printf("请输入删除图书书名:\n");
            scanf("%s",s.name);
            s.no = -1;
            pos=locateSqList(L,s);
            if(pos == -1)  //if(pos==L.length+1)
                printf("不存在该图书数据\n");
            else
            {
                printf("删除的图书数据为:%d %10s %7.2f\n",
                       L.data[pos].no,L.data[pos].name,L.data[pos].price);
                deleteSqList(&L, pos);
            }
            break;

        //显示图书数据
        case 4:
            dispSqList(L);
            break;
 
        //更新图书数据
        case 5:
            do{
                printf("请输入需要修改的图书 1.编号 或 2.名称\n");
                scanf("%d", &maxSize);
                switch(maxSize){
                    case 1:
                       printf("请输入编号:");
                       scanf("%d", &s.no);
                       strcpy(s.name,"\0");
                       break;
                    case 2:
                       printf("请输入书名:");
                       scanf("%s", s.name);
                       s.no = -1;
                       break;
                    default: break;
                }
            }while (maxSize != 1 && maxSize != 2);

            n=locateSqList(L,s);
            if (n == -1)
                printf("不存在该图书\n");
            else{
                printf("请输入新的图书编号 名称 价格\n");
                scanf("%d%s%f",&s.no,s.name,&s.price);
                updateSqList(L,n,s);
            }
            break;

         //退出
        case 6:
            t = 0;
            break;

        //错误处理
        default: 
            printf("输入有误!\n");
        }
    }
}
//////////////////////////////////////////////////////////////////////////

//5)各个函数的定义
int menu(){
    int n;
    //system("cls");//清屏
    printf("****welcome to book management system****\n");
    printf("   1、create        2、insert\n");                //修改
    printf("   3、delete        4、display\n");
    printf("   5、update        6、exit\n");                  //修改
    //printf("   7、exit\n");                                 //修改
    printf("*****************************************\n");
    printf("choose function(1-6):");
    scanf("%d",&n);
    return n;
}
 
//初始化操作:1.分配内存 2.给结构体变量赋值(length,listsize)
int initSqList(SQList *L){
    L->data=(STD*)malloc(MaxSize*sizeof(STD));
    if(L->data == NULL){   //if(L->data=NULL) 修改
        printf("申请内存失败!");
        exit(0);
    }
    L->listSize=MaxSize; // 修改
    L->length=0;
    return 1;
}
int dispSqList(SQList L){
    if(L.length == 0){ //if(L.data=0) 修改
        printf("没有信息!");
        return 0;      //修改 
    }
    printf("编号 书名 价格\n ");
    printf("%d\n",L.length);
    for(int i=0;i<L.length;i++){
        printf("%d %s %f\n",L.data[i].no,L.data[i].name,L.data[i].price);
    }
    return 1;
}
int insertSqList(SQList *L, int i, STD x){
    if(i < 1 || i > L->length + 1){
        printf("1error\n");
        return 0;
    }
    if(L->length>=L->listSize){
        printf("2error\n");
        return -1;
    }
    for(int k=L->length;k > i-1;k--)
        L->data[k]=L->data[k-1];
    L->data[i-1]=x;
    ++L->length;
    return 1;
}
int deleteSqList(SQList *L, int i){
    for(int k = i;k < L->length - 1;k++){
        L->data[k]=L->data[k+1];
    }
    L->length--;
    return 1;
}
 
int locateSqList(SQList L, STD x){
    int i;
    if(L.length == 0)
        return -1;    //return 0;
    for(i=0;i<L.length;i++){
        if(strcmp(L.data[i].name,x.name)==0||L.data[i].no==x.no)
        //if(strcmp(L.data[i].name,x.name)==0&&L.data[i].no==x.no&&L.data[i].price==x.price)
            return i; //i+1;
    }
    if (i >= L.length)
        return -1;
}
int updateSqList(SQList L, int i, STD x){
    L.data[i]=x;
    return 1;
}
int createSqList(SQList *L){  //修改
    int n = L->length, maxSize;
    STD x;
    if (L->length >= L->listSize){
        printf("表已满!\n");
        return 0;
    }
    else{
        printf("请输入需要创建的图书数量:");
        scanf("%d",&maxSize);
        for(int i = n;i < n + maxSize;i++){
            printf("input %d\n",i+1);
            scanf("%d%s%f",&x.no,x.name,&x.price);
            getchar();
            if (insertSqList(L,i+1,x) == -1) {
               printf("表已满!\n");
               break;
            }
        }
    }
    return 1;
}

“Devil组”引证GPT后的撰写:
在函数insertSqList中有几个地方存在语法错误:

在第22行,应该使用比较运算符==来判断 L->length 是否等于0,而不是赋值运算符=。

在第23行,应该使用递增运算符++,而不是递减运算符--

在第25行,应该使用花括号来包裹if语句体内的多个语句。