| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 959 人关注过本帖
标题:[求助]关于使用结构体数组的几个问题
只看楼主 加入收藏
jiwind
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-2-13
收藏
 问题点数:0 回复次数:6 
[求助]关于使用结构体数组的几个问题

大家好,因为本人刚学完部分C语言,老师布置一道大作业题,编写一个简易的电话号码存储系统。我在做修改客户信息时编了如下代码:
我的思路时,找到要修改的客户信息时,然后用循环语句把后面的客户信息往前推,即后面覆盖前面的。

执行时问题:找到要修改的信息,可以结果不是后面的客户信息把要删的客户信息覆盖掉,显示几行“烫”字,后面的信息依然未变,我看了STRCPY()函数,没看出什么地方错误!!!不知哪位高手能否帮我解答,或者跟我学习进度一样的朋友一起切磋切磋。

代码:
void delcust()
{
FILE *fp;
struct cust_st customer[100];//结构体已在前面声明了//
int size=sizeof(struct cust_st);
int i,j, count=0;
char temp[31],flag='y', found='n';

while((fp=fopen("telephone.dat","r+b"))==NULL)
{
printf("\nERROR opening this file!!!");
getchar();
exit(1);
}
while(!feof(fp))//计数在文件中有几个结构体信息,为下面的循环语句用//
{
if((fread(customer,size,1,fp))==1)
(count++);
}


while(flag=='y')
{

system("cls");
printf("\n---------------------------------------------------------------");
printf("\n* 删除客户信息 *");
printf("\n---------------------------------------------------------------");
printf("\n\n请输入要删除客户的名称:");
scanf("%s",temp);
rewind(fp);
for(i=0;i<count;i++)
{
fread(&customer[i],size,1,fp);//把文件读到内存中//
if((strcmp(customer[i].name,temp))==0)
{
found='y';
break;
}
else
{
printf("\n\n您输入的客户不存在!!!");
break;
}

}

if(found=='y')
{
printf("\n\n\t客户名称 = %s",customer[i].name);
printf("\n\t客户地址 = %s",customer[i].address);
printf("\n\t电话号码 = %s",customer[i].telnumber);
for(j=i+1,i=0;j<count;j++)
{
strcpy(customer[j-1].name,customer[j].name);
strcpy(customer[j-1].address,customer[j].address);
strcpy(customer[j-1].telnumber,customer[j].telnumber);
}
printf("\n\n 该客户已被删除...");

}


rewind(fp);
for(i=0;i<(count-1);i++)
fwrite(&customer[i],size,1,fp);
printf("\n\n是否继续删除客户信息:(y/n)");
scanf(" %c",&flag);

}

fclose(fp);
}

搜索更多相关主题的帖子: 结构体 
2006-02-13 18:06
stdio
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-1-22
收藏
得分:0 
while(!feof(fp))//计数在文件中有几个结构体信息,为下面的循环语句用//
{
if((fread(customer,size,1,fp))==1)
(count++);
}

这个不对吧 customer 一直都没变啊 怎么读到结构体数组里??
2006-02-13 22:08
stdio
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-1-22
收藏
得分:0 
改成这样看看
while(!feof(fp))//计数在文件中有几个结构体信息,为下面的循环语句用//
{
if((fread(customer++,size,1,fp))==1)
(count++);
}
2006-02-13 22:10
stdio
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-1-22
收藏
得分:0 
这种题用动态链表做比较好吧 删除容易得很 改几下指针就完事
2006-02-13 22:11
jiwind
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-2-13
收藏
得分:0 
以下是引用stdio在2006-2-13 22:08:00的发言:
while(!feof(fp))//计数在文件中有几个结构体信息,为下面的循环语句用//
{
if((fread(customer,size,1,fp))==1)
(count++);
}

这个不对吧 customer 一直都没变啊 怎么读到结构体数组里??

不过我在这里目的倒不是读到结构体数组,而是计算在文件在有几个结构体信息,为下面的循环语句做准备。不过话说回来,你说得没错啊,customer当然没变,不过读文件一个信息成功时,文件指针会自动指向下一个信息,靠feof(fp)函数应当能读完文件的,不过打印结构体数组customer时,只能打印出第一个信息。而变量count打印时是显示实际的文件内的几个信息的。郁闷!!!

2006-02-14 10:47
jiwind
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-2-13
收藏
得分:0 
以下是引用stdio在2006-2-13 22:11:00的发言:
这种题用动态链表做比较好吧 删除容易得很 改几下指针就完事

动态我们这个教程没提到,所以目前还不会做!!!

2006-02-14 10:49
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
链表本身不是动态的吗?

淘宝杜琨
2006-02-14 11:12
快速回复:[求助]关于使用结构体数组的几个问题
数据加载中...
 
   



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

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