鱼C论坛

 找回密码
 立即注册
查看: 3158|回复: 13

谭浩强C程序设计学习辅导打错问题请教

[复制链接]
发表于 2016-4-17 07:16:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 晚起鸟儿 于 2016-4-17 11:54 编辑

谭浩强C程序设计学习辅导13.3案例3:电订餐话信息处理我照着敲出错,请帮忙检查修改程序
电话订餐.rar (1 KB, 下载次数: 10)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-17 10:16:27 | 显示全部楼层

回帖奖励 +5 鱼币

沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-19 16:15:28 | 显示全部楼层
求高手解答呀~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-19 17:22:51 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 mingcxx 于 2016-4-19 17:41 编辑

修改如下,我用的VS2013,所以输入函数是scanf_s(),如果你的不支持,就用我注释后的可以。
建议:这个程序在实际应用上还有问题,比如没有没有用户输入错误数据类型时的提示代码。只有用户输入正确的数据类型才能正常运行;还有客户编号,最好由程序自动编号,以免用户输入的编号不连续等等。
就是这样了:
  1. #include <stdio.h>
  2. #include <string.h>

  3. #define MaxSize 20
  4. #define NAME_SIZE 41                        //存放客户名,尺寸放大点,比如少数民族客户名
  5. #define SIZE 10

  6. struct guest_info{
  7.         char name[NAME_SIZE];
  8.         int sum;
  9.         char time[SIZE];
  10.         int number;
  11. }GuestList[MaxSize];

  12. void Insert(int *);
  13. void Search(int);
  14. void Update(int);
  15. void Delete(int *);
  16. void Show(int);

  17. int main(void)
  18. {
  19.         int i;
  20.         int count = 0;

  21.         do
  22.         {
  23.                 printf("\n");
  24.                 printf("1---插入(Insert)\n");
  25.                 printf("2---查询(Search)\n");
  26.                 printf("3---修改(Update)\n");
  27.                 printf("4---删除(Delete)\n");
  28.                 printf("5---显示(Show)\n");
  29.                 printf("6---退出(Exit)\n");
  30.                 scanf_s("%d", &i, SIZE);                                        //scanf_s("%d", &i);       
  31.                 switch (i)
  32.                 {
  33.                 case 1:Insert(&count);
  34.                         break;
  35.                 case 2:Search(count);
  36.                         break;
  37.                 case 3:Update(count);
  38.                         break;
  39.                 case 4:Delete(&count);
  40.                         break;
  41.                 case 5:Show(count);
  42.                         break;
  43.                 case 6:
  44.                         break;
  45.                 default:printf("错误!请重选");
  46.                         break;
  47.                 }
  48.                
  49.         } while (i != 6);

  50.         return 0;
  51. }

  52. void Insert(int * count)
  53. {
  54.         int i, in_number;

  55.         if (*count == MaxSize)
  56.         {
  57.                 printf("空间已满!");
  58.                 return;
  59.         }
  60.         printf("请输入编号:");
  61.         scanf_s("%d", &in_number, SIZE);                                //scanf("%d", &in_number);
  62.         for (i = 0; i < *count; i++)
  63.         {
  64.                 if (GuestList[i].number == in_number)
  65.                 {
  66.                         printf("已有相同的编号:");
  67.                         return;
  68.                 }
  69.                
  70.         }
  71.         GuestList[i].number = in_number;
  72.         printf("请输入姓名:");
  73.         scanf_s("%s", GuestList[i].name, NAME_SIZE);        //scanf("%s", GuestList[i].name);
  74.         printf("请输入人数:");
  75.         scanf_s("%d", &GuestList[i].sum, SIZE);                        //scanf("%d", &GuestList[i].sum);
  76.         printf("请输入用餐时间:");
  77.         scanf_s("%s", GuestList[i].time, SIZE);                        //scanf("%s", GuestList[i].time);
  78.         (*count)++;

  79. }

  80. void Search(int count)
  81. {
  82.         int i, number, flag = 1;

  83.         printf("请输入要查询的编号: ");
  84.         scanf_s("%d", &number, 10);                                        //scanf("%d", &number);
  85.         for (i = 0; i < count&&flag; i++)
  86.         {
  87.                 if (GuestList[i].number == number)
  88.                 {
  89.                         printf("姓名:%s\n", GuestList[i].name);
  90.                         printf("人数:%d\n", GuestList[i].sum);
  91.                         printf("用餐时间:%s\n", GuestList[i].time);
  92.                         flag = 0;
  93.                 }
  94.         }
  95.         if (flag)
  96.                         printf("没有查询到!!");

  97. }
  98. void Update(int count)
  99. {
  100.         int i, number, flag = 1;

  101.         printf("请输入要修改数据的编号:");
  102.         scanf_s("%d", &number, SIZE);                                        //scanf("%d", &number);
  103.         for (i = 0; i < count&&flag; i++)
  104.         {
  105.                 if (GuestList[i].number == number)
  106.                 {
  107.                         printf("请输入人数:");
  108.                         scanf_s("%d", &GuestList[i].sum, SIZE);        //scanf("%d", &GuestList[i].sum);
  109.                         printf("请输入用餐时间:");
  110.                         scanf_s("%s", GuestList[i].time, SIZE);        //scanf("%s", GuestList[i].time);
  111.                         flag = 0;
  112.                 }
  113.         }
  114.         if (flag)
  115.                 printf("没有查询到可以修改的数据!!\n");
  116. }
  117. void Delete(int * count)
  118. {
  119.         int i, j, number, flag = 1;

  120.         printf("请输入要删除数据的编号:");
  121.         scanf_s("%d", &number, SIZE);                                        //scanf("%d", &number);
  122.         for (i = 0; i<*count&&flag; i++)
  123.         {
  124.                 if (GuestList[i].number == number)
  125.                 {
  126.                         for (j = i; i<*count - 1; j++)
  127.                                 GuestList[j] = GuestList[j + 1];
  128.                         flag = 0;
  129.                         (*count)--;
  130.                 }
  131.                
  132.         }
  133.         if (flag)
  134.                 printf("没有查询到可以删除的数据!!");
  135. }
  136. void Show(int count)
  137. {
  138.         int i;

  139.         printf("\n");
  140.         printf("      编号       姓名       人数        用餐时间\n");
  141.         for (i = 0; i<count; i++)
  142.         {
  143.                 printf("%10d", GuestList[i].number);
  144.                 printf("%12s", GuestList[i].name);
  145.                 printf("%10d", GuestList[i].sum);
  146.                 printf("%12s\n", GuestList[i].time);
  147.         }
  148. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +1 收起 理由
晚起鸟儿 + 5 + 5 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-20 16:19:39 | 显示全部楼层
mingcxx 发表于 2016-4-19 17:22
修改如下,我用的VS2013,所以输入函数是scanf_s(),如果你的不支持,就用我注释后的可以。
建议:这个程 ...

谢谢高手耐心解答,除
35行应为//scanf("%d", &i); 改为您注释后的代码可以运行,虽然没能明白代码意思,比如case 1:Insert(&count);和case 1:Insert(count);有什么区别,
04.#define MaxSize 20
05.#define NAME_SIZE 41                    
06.#define SIZE 10
是定义预留空间字节大小吗……。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-20 21:10:28 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 mingcxx 于 2016-4-20 21:24 编辑

声明:我也是新手,哈哈。帮忙之外,也是练习。
抱歉,注释还是没写好,幸亏发现了
那个4、5、6、行的的确是预留空间字节大小,写成常量以后修改也方便,不用整个代码里找着修改了,搞不好还落下几个。
对于Insert(&count);遵照了原代码的编写。&是地址运算符,&count取count的地址,把地址作为参数传递。
代码中用main()里唯一的count作为订单数目(最大为MaxSize 20个)的计数器。
函数Insert(&count)在增加一条订单,所以通过传递来的main()函数内count的地址把count计数器增加1。
如果去掉“&”,那么Insert()就会去更新地址值等于count处的变量,而main()内的count依然没变,开开心心地。
同理,删除操作Delete(&count);也会在删除一条订单之后,让订单数计数器count减一,所以也传递了count的地址。其他两个查询修改函数并不涉及订单数的增减,只需要知道订单数进行查找修改记录,传一个计数器的值就可以了。
。。。手残,回复变成了跟帖。。。抱歉抱歉。。。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +1 收起 理由
晚起鸟儿 + 5 + 5 + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-22 11:23:34 | 显示全部楼层

回帖奖励 +1 鱼币

回帖是一种美德...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-12 08:03:54 | 显示全部楼层

回帖奖励 +1 鱼币

今天有么  问个问题
麻烦师兄帮忙看看 悬赏问题 里有发布 有图片 这个 Vbox 增强工具箱安装失败问题
Stopping VirtualBox Additions  [FAILED]  这个鬼
3Q
111.jpg
222.jpg

评分

参与人数 1荣誉 -1 鱼币 -1 贡献 -1 收起 理由
晚起鸟儿 -1 -1 -1 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-18 11:42:42 | 显示全部楼层

回帖奖励 +1 鱼币

定一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-8 11:38:10 | 显示全部楼层

回帖奖励 +1 鱼币

看看,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-1 18:49:38 | 显示全部楼层

回帖奖励 +1 鱼币

我帮你看一看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-1 18:51:39 | 显示全部楼层

回帖奖励 +1 鱼币

  1. #include "stdio.h"
  2. #include "string.h"
  3. #define MaxSize 20
  4. struct guest_info{
  5. char name[8];
  6. int sum;
  7. char time[10];
  8. int number;
  9. }GuestList[MaxSize];
  10. void Insert(int *);
  11. void Search(int);
  12. void Update(int);
  13. void Delete(int *);
  14. void Show(int);
  15. int main()
  16. {
  17. int i;
  18. int count=0;
  19. do
  20. {
  21.   printf("\n");
  22.   printf("1---&#178;&#229;&#200;&#235;(Insert)\n");
  23.   printf("2---&#178;é&#209;&#175;(Search)\n");
  24.   printf("3---&#208;&#222;&#382;&#196;(Update)\n");
  25.   printf("4---&#201;&#376;&#179;&#253;(Delete)\n");
  26.   printf("5---&#207;&#212;&#202;&#376;(Show)\n");
  27.   printf("6---&#205;&#203;&#179;&#246;(Exit)\n");
  28.   scanf("%d",&i);
  29.   switch(i)
  30.   {
  31.   case 1:Insert(&count);
  32.        break;
  33.   case 2:Search(count);
  34.     break;
  35.   case 3:Update(count);
  36.     break;  
  37.   case 4:Delete(&count);
  38.     break;
  39.   case 5:Show(count);
  40.     break;
  41.   case 6:break;
  42.   default:printf("&#381;í&#206;ó&#163;&#161;&#199;&#235;&#214;&#216;&#209;&#161;");break;
  43.   }
  44. }while(i!=6);
  45. return 0;
  46. }

  47.   void Insert(int * count)
  48.   {
  49.    int i, in_number;
  50.    if(*count==MaxSize)
  51.    {
  52.     printf("&#191;&#213;&#338;&#228;&#210;&#209;&#194;ú&#163;&#161;");return;
  53.    }
  54.    printf("&#199;&#235;&#202;&#228;&#200;&#235;±à&#186;&#197;&#163;&#186;");
  55.    scanf("%d",&in_number);
  56.    for(i=0;i<*count;i++)
  57.    if(GuestList[i].number==in_number)
  58.   
  59.     {
  60.     printf("&#210;&#209;&#211;&#208;&#207;à&#205;&#172;&#181;&#196;±à&#186;&#197;&#163;&#186;");return;
  61.     }
  62.    GuestList[i].number=in_number;
  63.    printf("&#199;&#235;&#202;&#228;&#200;&#235;&#208;&#213;&#195;&#251;&#163;&#186;");
  64.    scanf("%s",GuestList[i].name);
  65.    printf("&#199;&#235;&#202;&#228;&#200;&#235;&#200;&#203;&#202;&#253;&#163;&#186;");
  66.    scanf("%d",&GuestList[i].sum);
  67.    printf("&#199;&#235;&#202;&#228;&#200;&#235;&#211;&#195;&#178;&#205;&#202;±&#338;&#228;&#163;&#186;");
  68.    scanf("%s",GuestList[i].time);
  69.    (*count)++;

  70.   }
  71.   void search(int count){
  72.           int i,number,flag=1;
  73.           printf("&#199;&#235;&#202;&#228;&#200;&#235;&#210;&#170;&#178;é&#209;&#175;&#181;&#196;±à&#186;&#197;");
  74.           scanf("%d",&number);
  75.           for(i=0;i<count&&flag;i++)
  76.           if(GuestList[i].number==number)
  77.           {printf("&#208;&#213;&#195;&#251;&#163;&#186;%s,GuestList[i].name");
  78.           printf("&#200;&#203;&#202;&#253;&#163;&#186;%d",GuestList[i].sum);
  79.       printf("&#211;&#195;&#178;&#205;&#202;±&#338;&#228;&#163;&#186;%s",GuestList[i].time);
  80.           flag=0;
  81.           }
  82.           else
  83.                   printf("&#195;&#187;&#211;&#208;&#178;é&#209;&#175;&#181;&#339;!!");
  84.   }
  85.           void Update(int count)
  86.           {int i,number, flag=1;
  87.           printf("&#199;&#235;&#202;&#228;&#200;&#235;&#210;&#170;&#208;&#222;&#382;&#196;&#202;&#253;&#376;&#221;&#181;&#196;±à&#186;&#197;:");
  88.           scanf("%d",&number);
  89.           for(i=0;i<count&&flag;i++)
  90.           if(GuestList[i].number==number)  
  91.                   {
  92.                           printf("&#199;&#235;&#202;&#228;&#200;&#235;&#200;&#203;&#202;&#253;&#163;&#186;");
  93.                           scanf("%d",&GuestList[i].sum);
  94.                           printf("&#199;&#235;&#202;&#228;&#200;&#235;&#211;&#195;&#178;&#205;&#202;±&#338;&#228;&#163;&#186;");
  95.                           scanf("%s,GuestList[i].time");
  96.                           flag=0;
  97.           }
  98.                   else
  99.                           printf("&#195;&#187;&#211;&#208;&#178;é&#209;&#175;&#181;&#339;&#191;&#201;&#210;&#212;&#208;&#222;&#382;&#196;&#181;&#196;&#202;&#253;&#376;&#221;!!");
  100.           }
  101.           void delete(int*count)
  102.           {int i,j,number,flag=1;
  103.           printf("&#199;&#235;&#202;&#228;&#200;&#235;&#210;&#170;&#201;&#376;&#179;&#253;&#202;&#253;&#376;&#221;&#181;&#196;±à&#186;&#197;&#163;&#186;");
  104.           scanf("%d",&number);
  105.           for(i=0;i<*count&&flag;i++)
  106.           {if(GuestList[i].number==number)
  107.           {for(j=i;i<*count-1;j++)
  108.           GuestList[j]=GuestList[j+1];
  109.           flag=0;
  110.           (*count)--;
  111.           }
  112. else
  113. printf("&#195;&#187;&#211;&#208;&#178;é&#209;&#175;&#181;&#339;&#191;&#201;&#210;&#212;&#201;&#376;&#179;&#253;&#181;&#196;&#202;&#253;&#376;&#221;!!");
  114.           }
  115.           }
  116.           void Show(int count)
  117.           {int i;
  118.           printf("\n");
  119.           printf("±à&#186;&#197; &#208;&#213;&#195;&#251; &#200;&#203;&#202;&#253; &#211;&#195;&#178;&#205;&#202;±&#338;&#228;\n");
  120.           for(i=0;i<count;i++)
  121.           {printf("%10d",GuestList[i].number);
  122.           printf("%12s",GuestList[i].name);
  123.           printf("%10d",GuestList[i].sum);
  124.           printf("%12s\n",GuestList[i].time);
  125.           }
  126.           }
复制代码

我下载打开全是乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-1 18:52:38 | 显示全部楼层
麻烦楼主自己复制一下然后回复在帖子上。谢谢!我用的系统是linux MINT18.1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 12:38:12 | 显示全部楼层

回帖奖励 +1 鱼币

老谭错误还是挺多的,但是讲的还不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-24 13:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表