收藏 分享(赏)

(53)--10-6 深入学习EOF-feof函数-ferror函数.doc

上传人:职教中国 文档编号:21417094 上传时间:2023-11-02 格式:DOC 页数:5 大小:20.12KB
下载 相关 举报
(53)--10-6 深入学习EOF-feof函数-ferror函数.doc_第1页
第1页 / 共5页
(53)--10-6 深入学习EOF-feof函数-ferror函数.doc_第2页
第2页 / 共5页
(53)--10-6 深入学习EOF-feof函数-ferror函数.doc_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、深入学习EOF、feof函数、ferror函数EOF详解EOF是end of file的缩写,表示文字流(stream)的结尾。这里的文字流,可以是文件(file),也可以是标准输入(stdin)。EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。#define EOF (-1)在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0127,不可能出现-1

2、,因此可以用EOF作为文件结束标志。1. /文件结尾示例2. #include3. voidmain()4. 5. FILE*fp;6. charc;7. fp=fopen(abc.txt,r);8. while(c=fgetc(fp)!=EOF)9. printf(%c,c);10. fclose(fp);11. 除了表示文件结尾,EOF还可以表示标准输入的结尾。但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。1)将getchar()的返回值与EOF进行比较。如果不相同,则你还没有到达文件结尾。换句话说,你可以使用如下表达式:while ((ch =

3、 getchar () != EOF)在Unix系统中,你能通过在一行开始键入Ctrl+D来从键盘模拟文件结束条件;DOS系统则使用Ctrl+Z来达到这个目的。顺便提一句,Linux中按下Ctrl+Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl+C表示终止该进程。如果真的想输入Ctrl+D,则必须先按下Ctrl+V,然后就可以输入Ctrl+D,系统就不会认为这是EOF信号。Ctrl+V表示按字面含义解读下一个输入,要是想按字面含义输入Ctrl+V,连续输入两次就行了。1. #include2. intmain(void)3. 4. charch;5. while(

4、ch=getchar()!=EOF)6. putchar(ch);7. return0;8. 2)scanf()函数返回一个整数值,这个值是成功读取的项目数,或者当遇到文件结束时返回一个EOF(文件结尾符)。1. #include2. intmain(void)3. 4. intn=0;5. while(scanf(%d,&n)!=EOF)6. 7. printf(helloworld!n);8. 9. return0;10. 3)fclose ( )函数如果成功返回 0,否则返回EOF(-1)。4)如果读入字符时发现已经到达文件结尾,getc ( )函数会返回一个特殊值EOF。1. intc

5、h;2. FILE*fp;3. fp=fopen(abc.txt,r);4. while(ch=getc(fp)!=EOF)5. 6. putchar(ch);7. feof ( )函数:函数原型:int feof(FILE * stream);所在头文件:stdio.h返回值:返回非零值代表已到达文件尾函数说明:feof ( ) 用来侦测是否读取到了文件尾, 尾数stream 为fopen()所返回之文件指针. 如果已到文件尾则返回非零值, 其他情况返回01. /示例2. #include3. intmain()4. 5. FILE*fp;6. intc;7. fp=fopen(abc.tx

6、t,r);8. if(fp=NULL)9. 10. perror(打开文件时发生错误);11. return(-1);12. 13. while(1)14. 15. c=fgetc(fp);16. if(feof(fp)/到文件结尾feof(fp)为117. 18. break;19. 20. printf(%c,c);21. 22. fclose(fp);23. return(0);24. EOF与feof函数区别EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASC代码值的形式存放,普通字符的ASC代码的范围是32到127(十进制),EOF的16进制代码为0xFF(十进制为-1),

7、因此可以用EOF作为文件结束标志。当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。注意:feof ( )函数,读取文件的最后一个字符以后,C 语言的feof ( ) 函数依然返回 0,表明没有到达文件结尾;只有当fgetc ( ) 向后再读取一个字符(即越过最后一个字符),feof()才会返回一个非零值,表示到达文件结尾。1. /示例2. #include3. intmain()4. 5. FILE*fp;6. i

8、ntc;7. fp=fopen(abc.txt,r);8. if(fp=NULL)9. 10. perror(打开文件时发生错误);11. return(-1);12. 13. c=fgetc(fp);14. while(!feof(fp)15. 16. printf(%c,c);17. c=fgetc(fp);/打印所有的数据之后,需要再fgetc(fp)一次,函数feof(fp)的返回值才为真18. 19. fclose(fp);20. return(0);21. 1. /改良版2. #include3. intmain()4. 5. FILE*fp;6. intc;7. fp=fopen

9、(abc.txt,r);8. if(fp=NULL)9. 10. perror(打开文件时发生错误);11. return(-1);12. 13. while(1)14. 15. c=fgetc(fp);16. if(feof(fp)/到文件结尾feof(fp)为117. 18. break;19. 20. printf(%c,c);21. 22. fclose(fp);23. return(0);24. ferror()函数函数原型:int ferror(FILE *stream)返回值:如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。函数描述:ferror,函数名,

10、在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。1. #include2. intmain()3. 4. FILE*fp;5. charc;6. fp=fopen(file.txt,w);7. c=fgetc(fp);8. if(ferror(fp)9. 10. printf(读取文件:file.txt时发生错误n);11. 12. clearerr(fp);13. if(ferror(fp)14. 15. printf(读取文件:file.txt时发生错误n);16. 17. fclose(fp);18. return(0);19. 20. 假设我们有一个文本文件file.txt,它是一个空文件。让我们编译并运行上面的程序,因为我们试图读取一个以只写模式打开的文件,这将产生以下结果。21. 读取文件:file.txt时发生错误

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报