weixin_57833145 2021-10-17 15:47 采纳率: 100%
浏览 34
已结题

学生制作图书管理系统

为什么输入书本数目为3,只输入了 1本,这个程序就返回了

img


代码如下,恳请各位博主解答。

#include <stdio.h>
#include <stdlib.h>
#define maxsize 10000
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct booklist{
    char *name[50];
    char *writer[20];
    char *number[50];
}Book;

typedef struct listnode{
    Book *elem;
    int length;
}sqelist;

//初始化
sqelist L;
void Initlist(sqelist*L){
    L->elem=(Book *)malloc(maxsize*sizeof(Book));
    L->length=0;
}
//输入
void Inputelem(sqelist *L){
    int i;
    printf("请输入图书的数目:");
    scanf("%d",&L->length);
    for(i=0;i<L->length;i++);
        scanf("%s%s%d",L->elem[i].name,L->elem[i].writer,&L->elem[i].number);
}
//输出
void outputelem(sqelist *L){
    int i;
    printf("\t书名\t作者\t书号\n");
    for(i=0;i<L->length;i++)
        printf("\t%s\t%s\t%d\n",L->elem[i].name,L->elem[i].writer,L->elem[i].number);
}

//查找
void searchforname(sqelist *L,char *name){
    int i;
    for(i=0;i<L->length;i++){
        if(strcmp(L->elem[i].name,name)==0);
            break;
    }
    if(i<L->length)
        printf("你要查找的书名为%s的书号是: %d,作者是%s.\n",name,L->elem[i].number,L->elem[i].writer);
    else
        printf("查找不成功!");
}
void searchforloc(sqelist *L,int i){
    printf("第%d位置上的书是:%s,%s,%d\n",i,L->elem[i-1].name,L->elem[i-1].writer,L->elem[i-1].number);
}

void searchlist(sqelist *L){
    int choice;
    char name[20];
    while(1){
    
    printf("********现在开始查找*******");
    printf("        1.按书名查找.\n");
    printf("        2.按作者查找.\n");
    printf("        3.按书号查找.\n");
    printf("        4.按位置查找.\n");
    printf("        0.退出.\n");
    scanf("%d",&choice);
    if(choice==0)break;
    switch(choice){
        case 1:printf("请输入你要查找的书名:");scanf("%s",name);
                searchforname(L,name);break;
    //    case 2:printf("请输入你要查找的位置:");scanf("%d",int i); 
        //        searchforloc(L,int i);scanf("%s",int i);
    }
}
}
//插入
void listinsert(sqelist *L,int i,int j,Book e){
   if(i<1 || i>L->length+1) return 0;       
   if(L->length==maxsize) return 1;   
   for(j=L->length-1;j>=i-1;j--)
       L->elem[j+1]=L->elem[j];    
    L->elem[i-1]=e;                  
  ++L->length;                 
  return 0;
}

//删除 
void listDel(sqelist *L,int i,int j){
if((i<1)||(i>L->length)) return 0;     
   for (j=i;j<=L->length-1;j++)          
           L->elem[j-1]=L->elem[j];
       --L->length;
  return 0;
}


//菜单 
int main(int argc, char *argv[]) {
    int choice;
    while(1){

    printf("**********图书信息管理*******\n");
    printf("1.初始化\n           ");
    printf("2.图书信息输入\n     ");
    printf("          3.图书信息输出\n     ");
    printf("          4.查找\n             ");     
    printf("          5.插入\n             ");
    printf("          6.删除\n             ");
    printf("请输入你的选择:");
    scanf("%d",&choice);
    if(choice==0)break;
    else{
        switch(choice){
            case 1:Initlist(&L);break;
            case 2:Inputelem(&L);break;
            case 3:outputelem(&L);break;
            case 4:searchlist(&L);break;
        }
    }
    
    
    
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 关注

    主要是 for() 后面多了; 分号。循环体是空的,scanf()在循环之外就只执行一次,

    img


    代码修改了一下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

    #include <stdio.h>
    #include <stdlib.h>
    #define maxsize 10000
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    typedef struct booklist{
        char name[50];
        char writer[20];
        int number;
    }Book;
    typedef struct listnode{
        Book *elem;
        int length;
    }sqelist;
    //初始化
    sqelist L;
    void Initlist(sqelist*L){
        L->elem=(Book *)malloc(maxsize*sizeof(Book));
        L->length=0;
    }
    //输入
    void Inputelem(sqelist *L){
        int i,s,n;
        printf("请输入图书的数目:");
        scanf("%d",&n);
        s = L->length;
        for(i=0;i<n;i++)  //你多了;
            scanf("%s%s%d",L->elem[s+i].name,L->elem[s+i].writer,&L->elem[s+i].number);
        L->length += n;
    }
    //输出
    void outputelem(sqelist *L){
        int i;
        printf("\t书名\t作者\t书号\n");
        for(i=0;i<L->length;i++)
            printf("\t%s\t%s\t%d\n",L->elem[i].name,L->elem[i].writer,L->elem[i].number);
    }
    //查找
    void searchforname(sqelist *L,char *name){
        int i;
        for(i=0;i<L->length;i++){
            if(strcmp(L->elem[i].name,name)==0);
                break;
        }
        if(i<L->length)
            printf("你要查找的书名为%s的书号是: %d,作者是%s.\n",name,L->elem[i].number,L->elem[i].writer);
        else
            printf("查找不成功!");
    }
    void searchforloc(sqelist *L,int i){
        printf("第%d位置上的书是:%s,%s,%d\n",i,L->elem[i-1].name,L->elem[i-1].writer,L->elem[i-1].number);
    }
    void searchlist(sqelist *L){
        int choice;
        char name[20];
        while(1){
        printf("********现在开始查找*******");
        printf("        1.按书名查找.\n");
        printf("        2.按作者查找.\n");
        printf("        3.按书号查找.\n");
        printf("        4.按位置查找.\n");
        printf("        0.退出.\n");
        scanf("%d",&choice);
        if(choice==0)break;
        switch(choice){
            case 1:printf("请输入你要查找的书名:");scanf("%s",name);
                    searchforname(L,name);break;
        //    case 2:printf("请输入你要查找的位置:");scanf("%d",int i);
            //        searchforloc(L,int i);scanf("%s",int i);
        }
    }
    }
    //插入
    void listinsert(sqelist *L,int i,int j,Book e){
       if(i<1 || i>L->length+1) return 0;
       if(L->length==maxsize) return 1;
       for(j=L->length-1;j>=i-1;j--)
           L->elem[j+1]=L->elem[j];
        L->elem[i-1]=e;
      ++L->length;
      return 0;
    }
    //删除
    void listDel(sqelist *L,int i,int j){
    if((i<1)||(i>L->length)) return 0;
       for (j=i;j<=L->length-1;j++)
               L->elem[j-1]=L->elem[j];
           --L->length;
      return 0;
    }
    
    //菜单
    int main(int argc, char *argv[]) {
        int choice;
        while(1){
        printf("**********图书信息管理*******\n");
        printf("   1.初始化\n");
        printf("   2.图书信息输入\n");
        printf("   3.图书信息输出\n");
        printf("   4.查找\n");
        printf("   5.插入\n");
        printf("   6.删除\n");
        printf("请输入你的选择:");
        scanf("%d",&choice);
        if(choice==0)break;
        else{
            switch(choice){
                case 1:Initlist(&L);break;
                case 2:Inputelem(&L);break;
                case 3:outputelem(&L);break;
                case 4:searchlist(&L);break;
            }
        }
    
        }
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 10月17日

悬赏问题

  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗