谭浩强C程序设计学习辅导打错问题请教
本帖最后由 晚起鸟儿 于 2016-4-17 11:54 编辑谭浩强C程序设计学习辅导13.3案例3:电订餐话信息处理我照着敲出错,请帮忙检查修改程序
沙发 求高手解答呀~ 本帖最后由 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;
int sum;
char time;
int number;
}GuestList;
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.number == in_number)
{
printf("已有相同的编号:");
return;
}
}
GuestList.number = in_number;
printf("请输入姓名:");
scanf_s("%s", GuestList.name, NAME_SIZE); //scanf("%s", GuestList.name);
printf("请输入人数:");
scanf_s("%d", &GuestList.sum, SIZE); //scanf("%d", &GuestList.sum);
printf("请输入用餐时间:");
scanf_s("%s", GuestList.time, SIZE); //scanf("%s", GuestList.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.number == number)
{
printf("姓名:%s\n", GuestList.name);
printf("人数:%d\n", GuestList.sum);
printf("用餐时间:%s\n", GuestList.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.number == number)
{
printf("请输入人数:");
scanf_s("%d", &GuestList.sum, SIZE); //scanf("%d", &GuestList.sum);
printf("请输入用餐时间:");
scanf_s("%s", GuestList.time, SIZE); //scanf("%s", GuestList.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.number == number)
{
for (j = i; i<*count - 1; j++)
GuestList = GuestList;
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.number);
printf("%12s", GuestList.name);
printf("%10d", GuestList.sum);
printf("%12s\n", GuestList.time);
}
} 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
是定义预留空间字节大小吗……。
本帖最后由 mingcxx 于 2016-4-20 21:24 编辑
声明:我也是新手,哈哈。帮忙之外,也是练习。
抱歉,注释还是没写好,幸亏发现了{:5_108:}
那个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的地址。其他两个查询修改函数并不涉及订单数的增减,只需要知道订单数进行查找修改记录,传一个计数器的值就可以了。{:5_108:}
。。。手残,回复变成了跟帖。。。抱歉抱歉。。。 回帖是一种美德... 今天有么问个问题
麻烦师兄帮忙看看 悬赏问题 里有发布 有图片 这个 Vbox 增强工具箱安装失败问题
Stopping VirtualBox Additions这个鬼
3Q 定一下 看看,学习了 我帮你看一看 #include "stdio.h"
#include "string.h"
#define MaxSize 20
struct guest_info{
char name;
int sum;
char time;
int number;
}GuestList;
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.number==in_number)
{
printf("ÒÑÓÐÏàͬµÄ±àºÅ£º");return;
}
GuestList.number=in_number;
printf("ÇëÊäÈëÐÕÃû£º");
scanf("%s",GuestList.name);
printf("ÇëÊäÈëÈËÊý£º");
scanf("%d",&GuestList.sum);
printf("ÇëÊäÈëÓòÍʱŒä£º");
scanf("%s",GuestList.time);
(*count)++;
}
void search(int count){
int i,number,flag=1;
printf("ÇëÊäÈëÒª²éѯµÄ±àºÅ");
scanf("%d",&number);
for(i=0;i<count&&flag;i++)
if(GuestList.number==number)
{printf("ÐÕÃû£º%s,GuestList.name");
printf("ÈËÊý£º%d",GuestList.sum);
printf("ÓòÍʱŒä£º%s",GuestList.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.number==number)
{
printf("ÇëÊäÈëÈËÊý£º");
scanf("%d",&GuestList.sum);
printf("ÇëÊäÈëÓòÍʱŒä£º");
scanf("%s,GuestList.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.number==number)
{for(j=i;i<*count-1;j++)
GuestList=GuestList;
flag=0;
(*count)--;
}
else
printf("ûÓвéѯµœ¿ÉÒÔÉŸ³ýµÄÊýŸÝ!!");
}
}
void Show(int count)
{int i;
printf("\n");
printf("±àºÅ ÐÕÃû ÈËÊý ÓòÍʱŒä\n");
for(i=0;i<count;i++)
{printf("%10d",GuestList.number);
printf("%12s",GuestList.name);
printf("%10d",GuestList.sum);
printf("%12s\n",GuestList.time);
}
}
我下载打开全是乱码 麻烦楼主自己复制一下然后回复在帖子上。谢谢!我用的系统是linux MINT18.1 老谭错误还是挺多的,但是讲的还不错
页:
[1]