关于文件进行中,文件内莫名出现多余码空间,但更改文件开与关的位置,则不会,为什么
void addanother(CON *p){
fflush(stdin);
printf("请输入通讯录新成员信息:\n名字:");
fgets(p->name,MAX,stdin);
printf("\n地址:");
fgets(p->address,MAX,stdin);
printf("\n电话号码:");
fgets(p->phone,MAX,stdin);
printf("\n分组:");
fgets(p->type,MIN,stdin);
}
以下两段代码只有fclose与fopen的位置不同。
void add() //文件输入出错代码
{
int i=1,temp1,j=0,temp2,r;//变量声明与初始化
CON *p,*b;
fpos_t t;
FILE *f;
f=fopen(file1,"rb+");
p=(CON *)malloc(sizeof(CON));
b=(CON *)malloc(sizeof(CON));
while(i)
{
addanother(p); //输入新成员信息
A: printf("\n\t\t\t\t\t\t\t是否保存如下信息:\n\n【姓名】%s\n【地址】%s\n【电话】%s\n【组别】%s\n\t\t\t\t\t\t\t选择是(1)或否(0)\n\t\t\t\t\t\t\t选择:",p->name,p->address,p->phone,p->type);
fflush(stdin);
r=scanf("%d",&temp1);
if(temp1!=1&&temp1!=0||r!=1)goto A;
else if(temp1==0)break;
else if(temp1==1)
{
do
{
fgetpos(f,&t);
r=fread(b,sizeof(CON),1,f);
}while(r!=0&&b->name[0]!=0);//填补之前删除内容的空间
fsetpos(f,&t);
j=fwrite(p,sizeof(CON),1,f);
if(j==1)printf("\n\t\t\t\t\t\t\t保存成功!!!\n");
else printf("\n\t\t\t\t\t\t\t保存失败!!!\n");
B: printf("\n\t\t\t\t\t\t\t是否继续添加通讯录?填写是(1)或否(0)\n\t\t\t\t\t\t\t输入:");//此处为是否继续输入新成员判断
r=scanf("%d",&temp2);
if(temp2==1&&r==1)i=1;
else if(temp2==0&&r==1)i=0;
else goto B;
}
}
fclose(f);
free(p);
free(b);
}
void add() //文件输入正确代码
{
int i=1,temp1,j=0,temp2,r;//变量声明与初始化
CON *p,*b;
fpos_t t;
FILE *f;
p=(CON *)malloc(sizeof(CON));
b=(CON *)malloc(sizeof(CON));
while(i)
{
f=fopen(file1,"rb+");
addanother(p); //输入新成员信息
A: printf("\n\t\t\t\t\t\t\t是否保存如下信息:\n\n【姓名】%s\n【地址】%s\n【电话】%s\n【组别】%s\n\t\t\t\t\t\t\t选择是(1)或否(0)\n\t\t\t\t\t\t\t选择:",p->name,p->address,p->phone,p->type);
fflush(stdin);
r=scanf("%d",&temp1);
if(temp1!=1&&temp1!=0||r!=1)goto A;
else if(temp1==0)break;
else if(temp1==1)
{
do
{
fgetpos(f,&t);
r=fread(b,sizeof(CON),1,f);
}while(r!=0&&b->name[0]!=0);//填补之前删除内容的空间
fsetpos(f,&t);
j=fwrite(p,sizeof(CON),1,f);
if(j==1)printf("\n\t\t\t\t\t\t\t保存成功!!!\n");
else printf("\n\t\t\t\t\t\t\t保存失败!!!\n");
fclose(f);
B: printf("\n\t\t\t\t\t\t\t是否继续添加通讯录?填写是(1)或否(0)\n\t\t\t\t\t\t\t输入:");//此处为是否继续输入新成员判断
r=scanf("%d",&temp2);
if(temp2==1&&r==1)i=1;
else if(temp2==0&&r==1)i=0;
else goto B;
}
}
free(p);
free(b);
}
有点迷糊,知道fopen与fclose的位置问题造成的却不知原因,求哥哥姐姐们帮忙看下