求助!!!关于文件保存的问题,谢谢!!
我想用文件保存一个记录,然后在下次运行这个程序时又增加输入一个数据,又保存起来,这样反复运行都可以把输入的数据保存在文件中,但是结果不对,希望各位指点一下,谢谢先了!!!
源程序如下:
#include<stdio.h>
#include<stdlib.h>
#define M 10
struct emp
{
char name[12]; //名字
char age[15]; //年龄
}mem[M];
FILE*fp2,*data_i;
int i;
void save_i(); //保存i的值
void enrol(); //数据输入
void save_mem();//数据保存
void print(); //数据打印
void save_i()
{
FILE*data_i;
data_i=fopen("data.txt","w");
fwrite(&i,sizeof(int),1,data_i);
fclose(data_i);
}
void save_mem() //数据保存
{
int j;
FILE*fp2;
data_i=fopen("data.txt","r");
fread(&i,sizeof(int),1,data_i);//读出i值,有必要吗???
fclose(data_i);
fp2=fopen("clientdata.txt","a+b");
if(fp2==NULL)
{printf("无法打开文件!\n\n");getchar();};
for(j=0;j<i;j++)
fwrite(&mem[j],sizeof(struct emp),1,fp2);
fclose(fp2);
}
//////////////////////////////////
void enrol() //输入数据
{
system("cls");
data_i=fopen("data.txt","a+");
fread(&i,sizeof(int),1,data_i);
fclose(data_i);
fp2=fopen("clientdata.txt","a+");
if(fp2==NULL)
{printf("cannot open file!\n");getchar();}
{
printf("-------------------------\n");
printf("请输入你的姓名:");
scanf("%s",&mem[i].name);
printf("请输入年龄:");
scanf("%s",&mem[i].age);
printf("-------------------------\n");
i++;
save_i();
// save_mem();
printf("name=%s ",mem[i-1].name);getchar();//test value name
printf("after enrol_i=%d",i);getchar();//test value i
}
fclose(fp2);
}
/////////////////////////
void print()
{
int k;
data_i=fopen("data.txt","r");
fread(&i,sizeof(int),1,data_i);
fclose(data_i);
if((fp2=fopen("clientdata.txt","rb"))==NULL)
{printf("cannot open file!\n");return;};
for(k=0;k<i;k++)
{
if(fread(&mem[k],sizeof(struct emp),1,fp2)!=1)
{printf("file read error\n");return;}
else{
printf("name=%s ",mem[k].name);
printf("age=%s \n",mem[k].age);
}
}
getchar();
fclose(fp2);
}
///////////////////////////////////////
void main()
{
enrol();
save_mem();
print();
getchar();
}