大家好,因为本人刚学完部分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);
}