
C语言想问一下导入函数load()里feof(fp)=0的含义以及return(i-1)为什么要返回i-1,在线等急急急
//-------保存文件函数----voidbaocun(intM)/*保存文件函数*/{inti;FILE*fp;//FILE是变量类型,FILE*fp是声明,声明f...
//-------保存文件函数----
void baocun(int M) /*保存文件函数*/
{
int i;
FILE *fp;//FILE 是变量类型,FILE *fp 是声明,声明fp是指针,用来指向FILE类型的对象。
if ((fp=fopen("E:\\student_list.txt","wb"))==NULL) /*创建文件并判断是否能打开,wb为新建一个二进制文件*/
{
printf ("此文件不能打开\n");
exit(0);
}
for (i=0;i<M;i++) /*将内存中学生的信息输出到磁盘文件中去*/
if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)/*获取数据的地址,写入内容的字节,数据项个数,目标文件指针,返回实际写入数据项个数*/
printf("file write error\n");
fclose(fp);/*文件关闭函数*/
}
int load() /*导入函数*/
{
FILE *fp;
int i=0;
if((fp=fopen("E:\\student_list.txt","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&stu[i],sizeof(struct student),1,fp);/*从文件中读取数据*/
i++;
}
while(feof(fp)==0);/*如果文件结束,则返回非0值,否则返回0*/
}
fclose(fp);
return(i-1); 展开
void baocun(int M) /*保存文件函数*/
{
int i;
FILE *fp;//FILE 是变量类型,FILE *fp 是声明,声明fp是指针,用来指向FILE类型的对象。
if ((fp=fopen("E:\\student_list.txt","wb"))==NULL) /*创建文件并判断是否能打开,wb为新建一个二进制文件*/
{
printf ("此文件不能打开\n");
exit(0);
}
for (i=0;i<M;i++) /*将内存中学生的信息输出到磁盘文件中去*/
if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)/*获取数据的地址,写入内容的字节,数据项个数,目标文件指针,返回实际写入数据项个数*/
printf("file write error\n");
fclose(fp);/*文件关闭函数*/
}
int load() /*导入函数*/
{
FILE *fp;
int i=0;
if((fp=fopen("E:\\student_list.txt","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&stu[i],sizeof(struct student),1,fp);/*从文件中读取数据*/
i++;
}
while(feof(fp)==0);/*如果文件结束,则返回非0值,否则返回0*/
}
fclose(fp);
return(i-1); 展开
3个回答
展开全部
feof(fp)函数测试文件fp是否已经读到末尾,不是则返回0,是则返回非零。
}while(feof(fp)==0); 这句的意思是,如果文件没到末尾(feof(fp)返回0),继续做循环。
i-1的意思是,当fread(&stu[i],sizeof(struct student),1,fp);读到文件末尾,它会返回且不读取字节,但是下一句i++还是执行了,所以多算了一个字节,因此要减回来。
}while(feof(fp)==0); 这句的意思是,如果文件没到末尾(feof(fp)返回0),继续做循环。
i-1的意思是,当fread(&stu[i],sizeof(struct student),1,fp);读到文件末尾,它会返回且不读取字节,但是下一句i++还是执行了,所以多算了一个字节,因此要减回来。
追问
哦哦,明白了,再多问一句,保存函数里的fopen函数用的是“wb”方式,但是load函数用的是“rb”为什么? 有什么区别吗
展开全部
feof(fp) 检查fp是否达到文件末尾,如果是则返回真,while条件应当写成while ( !feof(fp) );
返回i-1是没有道理的,是实际已读记录数减1
如果想避免遇到空记录文件,程序应当改写: while ( !feof(fp) ) { fread(...); i++; }
返回i-1是没有道理的,是实际已读记录数减1
如果想避免遇到空记录文件,程序应当改写: while ( !feof(fp) ) { fread(...); i++; }
追问
这是个保存学生借书证信息的程序,M是学生人数,那return(i-1)就是错误语句了吗
追答
应该return i;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
feof函数是用来判断文件是否结束,结束值为非0,不结束值为0。return 返回的值要根据要求判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |