本人正在用c语言去写代码,读写文件的时候遇到了问题。文件写入n段数据,会读出n+1段数据,多出来的那段数据是跟第n个数据一模一样。测试很多次,发现问题出在循环条件会多走一趟。
数据结构:
typedef struct Data
{
char cName[9];
char cSex[3];
char sNum[10];
char pNum[12];
}Data;
写文件:
void write()
{
Data r;
FILE* file_in;
char Name[9];
char Sex[3];
char Num_s[10];
char Num_p[12];
file_in = fopen("data.dat", "ab");//空文件的时候是wb,现在追加ab;
if (file_in == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}
printf("姓名:");
scanf("%s", Name);
strcpy(r.cName, Name);
printf("性别:");
scanf("%s", Sex);
strcpy(r.cSex, Sex);
printf("学号:");
scanf("%s", Num_s);
strcpy(r.sNum, Num_s);
printf("联系电话:");
scanf("%s", Num_p);
strcpy(r.pNum, Num_p);
fwrite(&r, sizeof(Data), 1 , file_in);
fclose(file_in);
}
读文件:
void read()
{
FILE* file_out;
Data r;
file_out = fopen("data.dat", "rb");
if (file_out == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}
while (!feof(file_out))
{
fread(&r, sizeof(Data), 1, file_out);
printf("%s\n%s\n%s\n%s\n", r.cName, r.cSex, r.sNum, r.pNum);
}
fclose(file_out);
}
主函数:
int main()
{
write();
read();
retrun 0;
}
先从空文件开始,添加一个数据,运行的结果:
我添加一个数据
我再添加一个数据
就是最后一个数据会重复!
难道文件结束了,feof函数有延迟了吗?还是我写的代码有问题?
文件到尾了feof函数返回0(未结束),下一次才返回1(结束),无论有多少个数据,文件结束了都会多读一遍,而且读的是最后一个数据
谁能帮我看看哪里出了问题,怎么解决?