c语言feof函数源代码 C语言feof函数

C语言中的feof函数

即使文件是空的,也要再读一次,feof函数值才会变为真。

网站制作、成都网站建设介绍好的网站是理念、设计和技术的结合。创新互联公司拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。

因为只有读出所有的数据之后,再读一次,函数feof(fp)的返回值才为真。(请见《C语言好程序设计—从入门到进阶》,人民邮电出版社,2011。)

示例:

#includestdio.h

#includestdlib.h

main()

{

FILE *fp;

int a;

if((fp=fopen("c:\\number.txt","r"))==NULL)

{

printf("文件打开失败!\n");

exit(0);

}

fscanf(fp,"%d",a);

while(!feof(fp)) /*等价于while(feof(fp)==0)*/

{

printf("%d ",a);

fscanf(fp,"%d",a);

}

fclose(fp);

}

寻 c语言函数fwrite和fread的源代码

fwrite源代码为:

size_t fwrite (const void* ptr,size_t size,size_t nmemb,FILE *fp);

头文件在search.h中,有的在stddef.h中

fread源代码为:

size_t fread(const void* ptr,size_t size,size_t nmemb,FILE *fp);

函数参数与fwrite相同

c语言中feof函数是怎样的?

他是指读到文件的末尾!!你可以查看相关文档 !!!! 很好理解的!!fscanf 是文件的 输入输出 ! printf是输出到控制台上!!!! 呵呵 没有什么大的不同 就一个函数而已 !!! 只是函数的调用过程中的参数不一样!!!

c语言feof()

第一个代码结果是11不错,但第二个就不是10了,应该是2——第一个代码用fgetc读,它把结束符也当一个字符读取了,当然'\n'也被读取了,共读了12个,但c=='\n'时被否定了,num没有增值,所以最后num是11;第二个代码显然只能把0123456789当一个整数来读(遇到'\n'判断为数据结束),所以一次就读完了,之所以最后num是2,是因为一次读完后并没有越过文件结尾产生读操作,所以feof不可能返回“真”,还要再读一次才产生错误,所以结果是2。这里有个问题必须注意:feof这个函数不产生读文件操作,只检查刚刚发生的读操作是否越过文件结尾了,所以要在逻辑上紧跟在读操作函数之后才能正确发挥作用。从这点上说,这两款代码都有错误,应该这么写:

(1)代码改如下:

#include "stdio.h"

int main(){

FILE *fp;

int num=0;

//int a;

char c;

if((fp=fopen("D:\\a.txt","r"))==NULL){

printf("打开文件时发生错误...\n");

return 0;

}

while(1){

c=fgetc(fp);

if(feof(fp))//把判断提前到这里来,处理过了再判断毫无意义

break;

if(c!='\n'){

num++;

printf("%c\n",c);

}

}

printf("\n%d\n",num);

fclose(fp);

return 0; 

}

(2)代码改如下:

#include "stdio.h"

int main(int argv,char *argc[]){

FILE *fp;

int num=0;

int a;

//char c;

if((fp=fopen("D:\\a.txt","r"))==NULL){

printf("打开文件时发生错误...\n");

return 0;

}

while(1){

fscanf(fp,"%d",a);

if(feof(fp))

break;

num++;

printf("%d\n",a);

}

printf("\n%d\n",num);

fclose(fp);

return 0; 

}

这样改后前者结果就应该是10,后者结果就应该是1。相信不会有错。——由于图3什么也看不清,不知你要问什么问题,以上只是按主要题意猜答的。

c语言feof()函数问题

while(1)

{

fread(a[j],sizeof(struct stu),1,fp);/*这里一旦读到结束位置,后面输出应停止,所以在fread后面增加判断即可*/

if(feof(fp)) break;

printf("%10d",a[j].a);

printf("%10s",a[j].b);

printf("%10s",a[j].c);

printf("%10.2lf",a[j].d);

printf("%10d",a[j].e);

printf("%10.2lf\n",a[j].f);

j++;

}

fclose(fp);

}

原因:

当遇到文件结束标志,不立即结束而再执行后面几个printf才结束,会由于%s输出遇不到字符串结束标志而一直向下输出,后面内容是随机的,当遇到字符串结束标志才停止。至于在那里停止,没有办法固定,要看内存单元%s正在访问位置是否是字符串结束标志。

不太理解C语言中的!feof(fp)?

feof是c标准函数,原型:int feof(FILE *stream)是feof函数原型,文件结束返回非0值,否则返回0。fp对应上面的文件流,!是bool取反的意思,!feof(fp)组合起来就是文件尚未结束的逻辑。


标题名称:c语言feof函数源代码 C语言feof函数
链接URL:http://pwwzsj.com/article/hiidjo.html