鱼C论坛

 找回密码
 立即注册
查看: 5338|回复: 3

[已解决]程序报错求修改

[复制链接]
发表于 2021-3-17 13:44:26 | 显示全部楼层 |阅读模式
60鱼币
程序很长,但是运行只有四处报错,网上查了以后知道错因了但还是不知道怎么修改,求大佬帮助。
#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[k] = L->data[k - 1];
         } 
         L->data[i -1] = 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[i - 1];
         for(k = i;k < L->length; k++)        //向前移动一组数据 
         {
                 L->data[k - 1] = L->data[k]; 
         }
         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[i].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[i].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[i - 1];
        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[i - 1] = 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[i].bn,L.data[i].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[n - 1].bn,L.data[n - 1].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[n - 1].bn,L.data[n - 1].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); 
                }
        }
 } 
最佳答案
2021-3-17 13:44:27
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
        char bn[256]  ; //图书名字
        char num[256] ; //图书编号
       
} 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[k] = L->data[k - 1];
         }
         L->data[i -1] = 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[i - 1];
         for(k = i;k < L->length; k++)        //向前移动一组数据
         {
                 L->data[k - 1] = L->data[k];
         }
         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[i].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[i].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[i - 1];
        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[i - 1] = 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[i].bn,L.data[i].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[256] , bn[256] ;
        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[n - 1].bn,L.data[n - 1].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[n - 1].bn,L.data[n - 1].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);
                }
        }
}

报错

报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-17 13:44:27 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
        char bn[256]  ; //图书名字
        char num[256] ; //图书编号
       
} 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[k] = L->data[k - 1];
         }
         L->data[i -1] = 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[i - 1];
         for(k = i;k < L->length; k++)        //向前移动一组数据
         {
                 L->data[k - 1] = L->data[k];
         }
         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[i].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[i].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[i - 1];
        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[i - 1] = 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[i].bn,L.data[i].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[256] , bn[256] ;
        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[n - 1].bn,L.data[n - 1].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[n - 1].bn,L.data[n - 1].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);
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-17 14:50:25 | 显示全部楼层
前排围观至尊会员
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-4 13:54:24 From FishC Mobile | 显示全部楼层
60币...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 22:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表