求调试,程序长 - -解决方法
求调试,程序长 - -!!
主要帮忙调试一下开辟空间的部分
不吝赐教
主要帮忙调试一下开辟空间的部分
- C/C++ code
#include<stdio.h> #include<malloc.h> #include<string.h> #define N 10//会员姓名长度 #define LEN sizeof(struct member) #define LENBOOK sizeof(struct book) #define MEMBER 100//会员人数 #define BOOK 1000//图书数量 struct book//图书信息结构体 { char bookname[N];//图书名字 char bookto[N];//图书借阅的会员姓名 struct book *next; }; struct book * book_increase(int k)//开辟图书空间 主要帮忙调试一下这个函数 { static struct book *head,*p1,*p2,*p; static int i=1; if(k==1) { i++; if(i==1) { head=p1=p=(struct book *)malloc(LENBOOK); p1->next=0; return p1; } else { p2=p1; p1=(struct book *)malloc(LENBOOK); p2->next=p1; p1->next=0; return p1; } } else if(k==2) return p; else return 0; } int book_input()//录入图书名 { struct book *p; do { p=book_increase(1); printf("输入书名(程序没有约束书名的唯一性):\n"); scanf("%s",p->bookname); printf("按Y继续,按任意键返回上一级菜单\n"); getchar(); } while(getchar()=='y'||getchar()=='Y'); return 1; } int book_select()//查询图书信息 { struct book *p; char t[N]; int k; printf("输入要查询的图书名:\n"); scanf("%s",t); do { p=book_increase(2); while(p->next!=0) { if(!strcmp(p->bookname,t)) { printf("%s",p->bookname); /*在结构体内添加相应的信息,在此显示*/ printf("%s",p->bookto); k=0; } else k=1; p=p->next; } if(k=1) printf("没有此书的相关信息!\n"); printf("按Y继续,按任意键返回上一级菜单\n"); getchar(); } while(getchar()=='y'||getchar()=='Y'); return 1; } int book_del() { struct book *p,*p1,*p2,*pf; char t[N]; int k=1; printf("输入要删除的书名:\n"); scanf("%s",t); do { p=book_increase(2); while(p->next!=0) { if(k==1&&!strcmp(p->bookname,t)) { p1=p; free(p); p=p1->next; } if(k==2) p2=p; if(k!=1&&!strcmp(p->bookname,t)) { p2->next=p1->next; pf=p1; p1=p1->next; free(pf); } p1=p1->next; p2=p2->next; } printf("按Y继续,按任意键返回上一级菜单\n"); getchar(); } while(getchar()=='y'||getchar()=='Y'); return 1; } int book_to()//图书借阅 { struct book *p; char t[N]; printf("输入要借阅的图书名\n"); scanf("%s",t); do { p=book_increase(2); while(p->next!=0) { if(!strcmp(p->bookname,t)) { scanf("%s",p->bookto); /*在此检查会员的合法性*/ break; } p=p->next; } printf("按Y继续,按任意键返回上一级菜单\n"); getchar(); } while(getchar()=='y'||getchar()=='Y'); return 1; } int book_meun() { int k,m; printf("1:录入图书信息\n"); printf("2:查询图书信息\n"); printf("3:删除图书信息\n"); printf("4:图书借阅信息\n"); printf("5:返回主菜单\n"); scanf("%d",&k); switch(k) { case 1:m=book_input();break; case 2:m=book_select();break; case 3:m=book_del();break; case 4:m=book_to();break; case 5:m=2;break; } return m; } void main() { int k,m; do { printf("1:图书\n"); printf("2:会员\n"); printf("3:退出系统\n"); scanf("%d",&k); if(k==1) m=book_meun(); else if(k==3) m=0; else printf("输入有误\n"); } while(m!=0); }
不吝赐教