求大神帮我改一下,有错误,还有就是goto语句也改了,不用goto了
题目:书店存货清单书店通常使用个人电脑设置一个清单来管理书籍的存货情况,该清单记录每本书籍的书名,作者,出版社,在清单中的位置等信息。当顾客想要买某本书时,只要输入书籍的名称和作者,系统就会显示该书籍是否在清单中,如果书籍在清单中,系统会显示书籍的详细信息以及库存数量,如果不在清单中,也会显示相应的提示信息。如果顾客想买的书籍数量在库存的范围内,系统会计算总价格并显示出来,否则,会提示“所需数量不在库存范围内”。
根据以上的分析,编程要求:
一、用结构体自行定义几本书籍,要求包括书籍名称,作者,出版社,出版日期,价格,在目录中的位置;
二、当从键盘输入某本书的名称和作者姓名,如果能查询到则显示该书籍的所有信息,并提示“请输入所需数量”,如果所需数量在库存范围内,则显示总价,否则,显示“所需数量不在库存范围内”,接着继续提示顾客是否还想买其他书籍,如果输入“y”或“Y”表示继续输入下一本书的名称和作者姓名,进行下一轮查询;如果不能查询到该书籍,则显示“谢谢,再见!”,依次类推,不断循环。
#include<stdio.h>
#include<string.h>
int cmp(char str0[],char str1[]) //比较两个字符串是否相等,相等则返回0,否则返回非0
{
int i;
for(i=0;str0[i]!=0&&str1[i]!=0&&str0[i]==str1[i];i++);
return str0[i]-str1[i];
}
void main()
{
char sm[100],c; //sm[100]为储存书名的数组,c为是否继续查找书籍的依据,当其为y或Y是时,继续查找,否则为退出查找
int i=0,n=0,flag=0,j=0; //i在后面的for语句中计数用,n用来储存所需同种书籍的数量,j用来计数,以其为5时作为提示未找到书籍的依据
struct kc
{
char sm[100];
char zz[100];
char cbs[100];
long cbrq;
double jg;
int wz;
int sl;
} //定义储存书籍资料的结构体数组,依次为书籍名称,作者,出版社,出版日期,价格,在目录中的位置
struct kc a[5]={"c程序设计","谭浩强","清华大学出版社",20100604,33.00,1,100},{"代码的未来","松本行弘","人民邮电出版社",20130501,79.00,3,100},{"高等数学","同济大学数学系","高等教育出版社",20070606,29.40,2,100},{"51单片机典型应用开发范例大全","中国铁道出版社","郑锋",20111001,79.00,5,100},{"51单片机入门开发扩展全攻略","郭天祥",20090101,87.00,4,100};
}
flag1:printf("请输入书名\n"); //书籍查找与显示书籍资料模块
fflush(stdin);
gets(sm);
j=0; //未找到书籍而跳到这里时使j清零,防止当再次没找到书籍时因j已大于5而无法进入最后的if语句,即无法得到未查找到的提示
for(i=0;i<5;i++)
{
j++; //当j加到5时则说明没有找到书籍
if(cmp(a[i].sm,sm)==0
{
printf("书名");
puts(a[i].sm);
printf("作者");
puts(a[i].zz);
printf("出版社");
puts(a[i].cbs);
printf("出版日期%d\n",a[i].cbrq);
printf("价格%lf\n",a[i].jg);
printf("位置%d\n",a[i].wz);
printf("库存%d\n",a[i].sl);
printf("请输入所需数量\n");
fflush(stdin);
scanf("%d",&n);
if(n<=a[i].sl)
printf("总价为%lf\n",(n*a[i].jg));
else
printf("所需数量不在库存范围内\n");
printf("是否还想要买其他书籍?(是单击Y或y,否双击回车键)\n");
fflush(stdin);
scanf("%c",&c);
if(c=='Y'||c=='y')
goto flsg1;
else
{
j=0; //当要退出时使j清零,防止当所找书籍位置为5时跳出for语句因j也为5而误进入下面的if语句
printf("谢谢,再见!\n");
}
}
}
if(j==5) //查找失败提示模块
{
j=0;
printf("未查找到该书籍,是否还想买其他书籍?(是Y或y否N或n)\n");
fflush(stdin); //清空输入缓存,防止干扰下次输入scanf("%c",&);
if(c=='y'||c=='Y')
goto flag1;
else
{
printf("谢谢,再见!\n");
}
}