鱼C论坛

 找回密码
 立即注册
查看: 3333|回复: 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(),如果你的不支持,就用我注释后的可以。
建议:这个程序在实际应用上还有问题,比如没有没有用户输入错误数据类型时的提示代码。只有用户输入正确的数据类型才能正常运行;还有客户编号,最好由程序自动编号,以免用户输入的编号不连续等等。
就是这样了:
#include <stdio.h>
#include <string.h>

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

struct guest_info{
        char name[NAME_SIZE];
        int sum;
        char time[SIZE];
        int number;
}GuestList[MaxSize];

void Insert(int *);
void Search(int);
void Update(int);
void Delete(int *);
void Show(int);

int main(void)
{
        int i;
        int count = 0;

        do
        {
                printf("\n");
                printf("1---插入(Insert)\n");
                printf("2---查询(Search)\n");
                printf("3---修改(Update)\n");
                printf("4---删除(Delete)\n");
                printf("5---显示(Show)\n");
                printf("6---退出(Exit)\n");
                scanf_s("%d", &i, SIZE);                                        //scanf_s("%d", &i);        
                switch (i)
                {
                case 1:Insert(&count);
                        break;
                case 2:Search(count);
                        break;
                case 3:Update(count);
                        break;
                case 4:Delete(&count);
                        break;
                case 5:Show(count);
                        break;
                case 6:
                        break;
                default:printf("错误!请重选"); 
                        break;
                }
                
        } while (i != 6);

        return 0;
}

void Insert(int * count)
{
        int i, in_number;

        if (*count == MaxSize)
        {
                printf("空间已满!");
                return;
        }
        printf("请输入编号:");
        scanf_s("%d", &in_number, SIZE);                                //scanf("%d", &in_number);
        for (i = 0; i < *count; i++)
        {
                if (GuestList[i].number == in_number)
                {
                        printf("已有相同的编号:");
                        return;
                }
                
        }
        GuestList[i].number = in_number;
        printf("请输入姓名:");
        scanf_s("%s", GuestList[i].name, NAME_SIZE);        //scanf("%s", GuestList[i].name);
        printf("请输入人数:");
        scanf_s("%d", &GuestList[i].sum, SIZE);                        //scanf("%d", &GuestList[i].sum);
        printf("请输入用餐时间:");
        scanf_s("%s", GuestList[i].time, SIZE);                        //scanf("%s", GuestList[i].time);
        (*count)++;

}

void Search(int count)
{
        int i, number, flag = 1;

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

}
void Update(int count)
{
        int i, number, flag = 1;

        printf("请输入要修改数据的编号:");
        scanf_s("%d", &number, SIZE);                                        //scanf("%d", &number);
        for (i = 0; i < count&&flag; i++)
        {
                if (GuestList[i].number == number)
                {
                        printf("请输入人数:");
                        scanf_s("%d", &GuestList[i].sum, SIZE);        //scanf("%d", &GuestList[i].sum);
                        printf("请输入用餐时间:");
                        scanf_s("%s", GuestList[i].time, SIZE);        //scanf("%s", GuestList[i].time);
                        flag = 0;
                }
        }
        if (flag)
                printf("没有查询到可以修改的数据!!\n");
}
void Delete(int * count)
{
        int i, j, number, flag = 1;

        printf("请输入要删除数据的编号:");
        scanf_s("%d", &number, SIZE);                                        //scanf("%d", &number);
        for (i = 0; i<*count&&flag; i++)
        {
                if (GuestList[i].number == number)
                {
                        for (j = i; i<*count - 1; j++)
                                GuestList[j] = GuestList[j + 1];
                        flag = 0;
                        (*count)--;
                }
                
        }
        if (flag)
                printf("没有查询到可以删除的数据!!");
}
void Show(int count)
{
        int i;

        printf("\n");
        printf("      编号       姓名       人数        用餐时间\n");
        for (i = 0; i<count; i++)
        {
                printf("%10d", GuestList[i].number);
                printf("%12s", GuestList[i].name);
                printf("%10d", GuestList[i].sum);
                printf("%12s\n", GuestList[i].time);
        }
}

评分

参与人数 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 鱼币

#include "stdio.h"
#include "string.h"
#define MaxSize 20
struct guest_info{
 char name[8];
 int sum;
 char time[10];
 int number;
}GuestList[MaxSize];
void Insert(int *);
void Search(int);
void Update(int);
void Delete(int *);
void Show(int);
int main()
{
 int i;
 int count=0;
 do
 {
  printf("\n");
  printf("1---²åÈë(Insert)\n");
  printf("2---²éѯ(Search)\n");
  printf("3---ÐÞžÄ(Update)\n");
  printf("4---ÉŸ³ý(Delete)\n");
  printf("5---ÏÔÊŸ(Show)\n");
  printf("6---Í˳ö(Exit)\n");
  scanf("%d",&i);
  switch(i)
  {
  case 1:Insert(&count);
       break;
  case 2:Search(count);
    break;
  case 3:Update(count);
    break;  
  case 4:Delete(&count);
    break;
  case 5:Show(count);
    break;
  case 6:break;
  default:printf("ŽíÎó£¡ÇëÖØÑ¡");break;
  }
 }while(i!=6);
 return 0;
}

  void Insert(int * count)
  {
   int i, in_number;
   if(*count==MaxSize)
   {
    printf("¿ÕŒäÒÑÂú£¡");return;
   }
   printf("ÇëÊäÈë±àºÅ£º");
   scanf("%d",&in_number);
   for(i=0;i<*count;i++)
   if(GuestList[i].number==in_number)
  
    {
    printf("ÒÑÓÐÏàͬµÄ±àºÅ£º");return;
    }
   GuestList[i].number=in_number;
   printf("ÇëÊäÈëÐÕÃû£º");
   scanf("%s",GuestList[i].name);
   printf("ÇëÊäÈëÈËÊý£º");
   scanf("%d",&GuestList[i].sum);
   printf("ÇëÊäÈëÓòÍʱŒä£º");
   scanf("%s",GuestList[i].time);
   (*count)++;
 
  }
  void search(int count){
          int i,number,flag=1;
          printf("ÇëÊäÈëÒª²éѯµÄ±àºÅ");
          scanf("%d",&number);
          for(i=0;i<count&&flag;i++)
          if(GuestList[i].number==number)
          {printf("ÐÕÃû£º%s,GuestList[i].name");
          printf("ÈËÊý£º%d",GuestList[i].sum);
      printf("ÓòÍʱŒä£º%s",GuestList[i].time);
          flag=0;
          }
          else
                  printf("ûÓвéѯµœ!!");
  }
          void Update(int count)
          {int i,number, flag=1;
          printf("ÇëÊäÈëÒªÐÞžÄÊýŸÝµÄ±àºÅ:");
          scanf("%d",&number);
          for(i=0;i<count&&flag;i++)
          if(GuestList[i].number==number)  
                  {
                          printf("ÇëÊäÈëÈËÊý£º");
                          scanf("%d",&GuestList[i].sum);
                          printf("ÇëÊäÈëÓòÍʱŒä£º");
                          scanf("%s,GuestList[i].time");
                          flag=0;
          }
                  else
                          printf("ûÓвéѯµœ¿ÉÒÔÐޞĵÄÊýŸÝ!!");
          }
          void delete(int*count)
          {int i,j,number,flag=1;
          printf("ÇëÊäÈëҪɟ³ýÊýŸÝµÄ±àºÅ£º");
          scanf("%d",&number);
          for(i=0;i<*count&&flag;i++)
          {if(GuestList[i].number==number)
          {for(j=i;i<*count-1;j++)
          GuestList[j]=GuestList[j+1];
          flag=0;
          (*count)--;
          }
else
printf("ûÓвéѯµœ¿ÉÒÔÉŸ³ýµÄÊýŸÝ!!");
          }
          }
          void Show(int count)
          {int i;
          printf("\n");
          printf("±àºÅ ÐÕÃû ÈËÊý ÓòÍʱŒä\n");
          for(i=0;i<count;i++)
          {printf("%10d",GuestList[i].number);
          printf("%12s",GuestList[i].name);
          printf("%10d",GuestList[i].sum);
          printf("%12s\n",GuestList[i].time);
          }
          }
我下载打开全是乱码
想知道小甲鱼最近在做啥?请访问 -> 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-11-27 22:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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