| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2240 人关注过本帖
标题:求大神帮我改一下,有错误,还有就是goto语句也改了,不用goto了
只看楼主 加入收藏
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求大神帮我改一下,有错误,还有就是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");
              }
          }
         
搜索更多相关主题的帖子: 个人电脑 提示信息 详细信息 出版社 结构体 
2016-03-05 22:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這個程序想用這幾行代碼就能打發?推倒重寫吧。

授人以渔,不授人以鱼。
2016-03-05 22:41
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:3 
明显的错误有:定义结构体的末尾}没有分号,还有结构体数组有你那样直接赋值的吗?我好像记得只能一个一个老实地分项初始化的吧。

   唯实惟新 至诚致志
2016-03-05 22:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
以下是引用qq1023569223在2016-3-5 22:57:02的发言:

明显的错误有:定义结构体的末尾}没有分号,还有结构体数组有你那样直接赋值的吗?我好像记得只能一个一个老实地分项初始化的吧。


定義時初始化是可以的,祇是他的格式錯了。

授人以渔,不授人以鱼。
2016-03-05 22:59
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
收藏
得分:0 
回复 4楼 TonyDeng
刚开始学,什么都不懂,求大神指导一下
2016-03-06 17:59
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:14 
改了些其中的小错误,你可以参考下,对比看看。

#include<stdio.h>
#include<string.h>
struct kc
{
    char sm[100];
    char zz[100];
    char cbs[100];
    long cbrq;
    double jg;
    int wz;
    int sl;
};
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[2];              //sm[100]为储存书名的数组,c为是否继续查找书籍的依据,当其为y或Y是时,继续查找,否则为退出查找
    int i = 0, n = 0, flag = 1, j = 0;      //i在后面的for语句中计数用,n用来储存所需同种书籍的数量,j用来计数,以其为5时作为提示未找到书籍的依据
                      //定义储存书籍资料的结构体数组,依次为书籍名称,作者,出版社,出版日期,价格,在目录中的位置
    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 } };

    while (flag)
    {
    flag = 0;
    printf("请输入书名\n");              //书籍查找与显示书籍资料模块
    //fflush(stdin);
    //gets(sm);
    scanf("%s", 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));
                a[i].sl -= n;
            }
            else
                printf("所需数量不在库存范围内\n");
            printf("是否还想要买其他书籍?(是单击Y或y,否双击回车键)\n");
            //fflush(stdin);
            scanf("%s", c);
            if (c[0] == 'Y' || c[0] == 'y')
            {
                flag = 1;
                break;
            }
            else
            {
                j = 0;            //当要退出时使j清零,防止当所找书籍位置为5时跳出for语句因j也为5而误进入下面的if语句
                printf("谢谢,再见!\n");
                break;
            }
        }
    }
    if (j == 5)    //查找失败提示模块
    {
        j = 0;
        printf("未查找到该书籍,是否还想买其他书籍?(是Y或y否N或n)\n");
        //fflush(stdin);   //清空输入缓存,防止干扰下次输入scanf("%c",&);
        scanf("%s", c);
        if (c[0] == 'y' || c[0] == 'Y')
            flag = 1;
        else
        {
            printf("谢谢,再见!\n");
        }
    }
    }
}
2016-03-07 10:14
weisx
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-2-29
收藏
得分:0 
回复 6楼 grmmylbs
完美运行,谢谢
2016-03-09 08:24
快速回复:求大神帮我改一下,有错误,还有就是goto语句也改了,不用goto了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052357 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved