c语言结构体写入,读出, fread fwrite
本人想用freadfwrite写入,读出文件发现出现错误,主要错误是feof函数错误!!还请大侠指正!!!代码如下:#include<stdio.h>structstud...
本人想用 fread fwrite写入,读出文件发现出现错误,主要错误是feof函数错误!!还请大侠指正!!!代码如下:
#include <stdio.h>
struct students
{
char name[8];
float mk;
} pers[3]={{"xiao",100.0},{"an",99.0},{"hao",98.0}};
typedef struct students st;
int main()
{
int i=0;
FILE *fp;
//写入
fp=fopen("out.dat","w");
for(i=0;i<3;i++)
{
printf("%s %.2f\n",pers[i].name,pers[i].mk);
fwrite(&pers[i],sizeof(struct students),1,fp);
}
fclose(fp);
//读出
fp=fopen("out.dat","r");
while(!feof(fp))
{
fread(&pers[i],sizeof(struct students),1,fp);
printf("%s %f\n",pers[i].name,pers[i].mk);
i++;
}
} 展开
#include <stdio.h>
struct students
{
char name[8];
float mk;
} pers[3]={{"xiao",100.0},{"an",99.0},{"hao",98.0}};
typedef struct students st;
int main()
{
int i=0;
FILE *fp;
//写入
fp=fopen("out.dat","w");
for(i=0;i<3;i++)
{
printf("%s %.2f\n",pers[i].name,pers[i].mk);
fwrite(&pers[i],sizeof(struct students),1,fp);
}
fclose(fp);
//读出
fp=fopen("out.dat","r");
while(!feof(fp))
{
fread(&pers[i],sizeof(struct students),1,fp);
printf("%s %f\n",pers[i].name,pers[i].mk);
i++;
}
} 展开
3个回答
展开全部
文件到了结尾当时并不会触发feof,而是再读一次读不到东西才触发feof,所以
fread(&pers[i],sizeof(struct students),1,fp);会有一次无效读取,应该在这句后判断是否结束
,把循环改成这样:
while(1)
{
fread(&pers[i],sizeof(struct students),1,fp);
if(!feof(fp))
printf("%s %f\n",pers[i].name,pers[i].mk);
else
break;
i++;
}
fread(&pers[i],sizeof(struct students),1,fp);会有一次无效读取,应该在这句后判断是否结束
,把循环改成这样:
while(1)
{
fread(&pers[i],sizeof(struct students),1,fp);
if(!feof(fp))
printf("%s %f\n",pers[i].name,pers[i].mk);
else
break;
i++;
}
展开全部
文件到了结尾当时并不会触发feof,而是再读一次读不到东西才触发feof,所以
fread(&pers[i],sizeof(struct students),1,fp);会有一次无效读取,应该在这句后判断是否结束
,把循环改成这样:
while(1)
{
fread(&pers[i],sizeof(struct students),1,fp);
if(!feof(fp))
printf("%s %f\n",pers[i].name,pers[i].mk);
else
break;
i++;
}
fread(&pers[i],sizeof(struct students),1,fp);会有一次无效读取,应该在这句后判断是否结束
,把循环改成这样:
while(1)
{
fread(&pers[i],sizeof(struct students),1,fp);
if(!feof(fp))
printf("%s %f\n",pers[i].name,pers[i].mk);
else
break;
i++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很明显你使用i这个变量的问题!在写入时使用循环后i的值为3,在读取文件时,继续使用导致定义的结构体数组下标越界。在使用循环之前,应该初始化i。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询