|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
昨天刚学完结构体,小甲鱼布置了个图书馆程序的课后作业,我写的程序可以运行,可是输出结果总不正确,写程序花了1个小时,改BUG花了我2个半小时还没搞好,请各位大神帮看看,改好我好开始学习链表了
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[128];
char auther[40];
float price;
struct Date date;
char publisher[40];
};
//录入书本信息
void getInput(struct Book *book,int *hao2)
{
printf("请输入书名:");
scanf("%s",book->title);
printf("请输入作者:");
scanf("%s",book->auther);
printf("请输入售价:");
scanf("%f",&book->price);
printf("请输入出版日期:");
scanf("%d %d %d",&(*book).date.year,&(*book).date.month,&book->date.day);
printf("请输入出版社:");
scanf("%s",book->publisher);
(*hao2)++;
printf("\n录入成功!!!\n书本编号为:%d\n",*hao2);
}
//打印输入结果
void printBook(struct Book *book )
{
printf("书名:%s\n",book->title);
printf("作者:%s\n",(*book).auther);
printf("出版日期:%d-%d-%d\n",(*book).date.year,(*book).date.month,(*book).date.day);
printf("售价:%.2f\n",(*book).price);
printf("出版社:%s\n",(*book).publisher);
}
int main(void)
{
int i=0,hao1=1000,zhao1,c=1;
int*hao2;
hao2=&hao1;
struct Book *b;
struct Book *library;
b = (struct Book*) malloc(sizeof(struct Book));
//b = (struct Book*) malloc(sizeof(struct Book));
//b =
/* if(b[i] == NULL)
{
printf("申请失败!!!");
exit(1);
}
*/
while(c!=-1)
{
printf("请输入书的信息;\n");
getInput((b+i),hao2);
putchar('\n');
i++;
printf("\n是否继续录入书本信息?输入-1退出输入,输入1继续录\n");
scanf("%d",&c);
b++;
}
printf("请问是否要查找书本?,1--查找,0--退出\n");
scanf("%d",&zhao1);
if(zhao1==1)
{
//============这里就是查找书籍的模块了============================//
printf("请输入您要查找的书的编号\n");
scanf("%d",&hao1);
if(hao1<1000||hao1>1050)
{
printf("对不起,输入无效,请检查\n");
}
else
{
hao1 = hao1-1002;
//====================这里是函数打印语句=======================//
printBook(&(b[hao1]));
}
}
free(b);
return 0;
本帖最后由 一叶枫残 于 2021-2-13 22:33 编辑
大部分没错的,简单改改就ok了,看注释,不明白再问 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[128];
char auther[40];
float price;
struct Date date;
char publisher[40];
};
//录入书本信息
void getInput(struct Book *book,int *hao2)
{
printf("请输入书名:");
scanf("%s",book->title);
printf("请输入作者:");
scanf("%s",book->auther);
printf("请输入售价:");
scanf("%f",&book->price);
printf("请输入出版日期:");
scanf("%d %d %d",&(*book).date.year,&(*book).date.month,&book->date.day);
printf("请输入出版社:");
scanf("%s",book->publisher);
(*hao2)++;
printf("\n录入成功!!!\n书本编号为:%d\n",*hao2);
}
//打印输入结果
void printBook(struct Book *book )
{
printf("书名:%s\n",book->title);
printf("作者:%s\n",(*book).auther);
printf("出版日期:%d-%d-%d\n",(*book).date.year,(*book).date.month,(*book).date.day);
printf("售价:%.2f\n",(*book).price);
printf("出版社:%s\n",(*book).publisher);
}
int main(void)
{
int i=0,hao1=1000,zhao1,c=1,j=0; //这里多定义一个j,方便释放内存(i的数据要保留,不然清除了就不知道分配了多少个结构体指针的内存)
int*hao2;
hao2=&hao1;
struct Book *b[20]; //这里改用指针数组,就是用来放指针的数组
struct Book *library;
while(c!=-1)
{
b[i] = (struct Book*) malloc(sizeof(struct Book)); //每放一本书,就分配一次内存
printf("请输入书的信息;\n");
getInput( b[i] , hao2);
putchar('\n');
i++;
printf("\n是否继续录入书本信息?输入-1退出输入,输入1继续录\n");
scanf("%d",&c);
//b++删掉
}
printf("请问是否要查找书本?,1--查找,0--退出\n");
scanf("%d",&zhao1);
if(zhao1==1)
{
//============这里就是查找书籍的模块了============================//
printf("请输入您要查找的书的编号\n");
scanf("%d",&hao1);
if(hao1<1000||hao1>1050)
{
printf("对不起,输入无效,请检查\n");
}
else
{
hao1 = hao1-1001; //这里改为-1001,因为数组从0开始算
//====================这里是函数打印语句=======================//
printBook( b[hao1] ); //因为这个数组存放的就是指针,所以不用加&
}
}
for(j=0;j<i;j++) //分配的内存都释放掉,i的作用就是保存分配了多少个内存的数据
{
free( b[j] );
}
return 0;
}
|
|