理解feof与EOF

feof(feof msdn)

feof用于判断文件结尾。头文件<cstdio>。使用方法是feof(fp),fp为指向需要判断的文件的指针。如果不到文件结尾,返回0值;如果是文件结尾,返回非0.

使用feof判断文件结尾一定要非常注意以下一点:

假设文件包含10字节,并且你读取了十字节,调用feof函数,函数返回值均为0,这是因为尽管文件指针这时已经指向文件尾了,但是你没有试图越过文件尾读取数据,只有当你尝试了读取第十一个字节时,调用feof,函数才会返回0.

因此,使用feof常用的逻辑结构是先读在判断,如果先判断在读取,就会发生异常。

EOF(EOF c++ reference)

c++ reference对其的讲解是:

“EOF是一个整数类型的宏定义,扩展为负数常量表达式(通常为-1)。

它被头文件<cstdio>中的好几个函数作为返回值使用,来表明已经到达文件尾或者示意一些其他的错误条件

它也被作为一个值来表示无效的字符。

在C++中,这个宏定义为char_traits<char>::eof().”

feof与EOF异同

具体参看feof与EOF的用法

EOF通常用来判断文本文件的结尾,因为EOF的值为-1,ASCII都是字符型,不可能出现-1的情况。而在二进制文件中,信息以数值存放,使用EOF就可能会异常。

因此,通常使用feof来判断二进制文件的结尾。

时间: 2024-10-17 00:47:39

理解feof与EOF的相关文章

feof和EOF的字符被重复读取问题的思考

void main() {   PNode pNode;   FILE *fp=fopen("1.txt","r");   pNode=Create(i);   while(getc(fp)!=EOF) {     int i;     fscanf(fp,"%d",&i);     pNode=Add(i,pNode);   }   fclose(fp);   Print(pNode); } (问题源码如上所示) 问题介绍 我在温习C语

feof()和EOF的用法—— C中文件结尾的判断

查看 stdio.h 可以看到如下定义: #define EOF (-1) #define _IOEOF 0x0010 #define feof(_stream) ((_stream)->_flag & _IOEOF) 由此可以看出,这两种方式的原理是不同的. 在这里先说下EOF和feof()这个两个宏定义,在我们学的课本中有这样的描述. EOF是不可输出字符,因此不能在屏幕上显示.由于字符的ASCII码不可能出现-1,因此EOF定义为-1是合适的.当读入的字符值等于EOF时,表示读入的已不

Win32串口API

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点.每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答. 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活.其二是调用Window

串口程序.资料

1.Win32下串口读写设置操作 - CSDN博客.html(http://blog.csdn.net/dahan_wangtao/article/details/1621212) 2.网页内容拷贝: win32下串口读写设置操作 转载 2007年05月22日 17:15:00 标签: null / 通讯 / signal / character / struct / buffer 3311 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行

一个文件合成器的代码

功能:可以将一个jpg文件与一个rar文件进行合成. #include <stdio.h> int main() { printf("本程序可以合成一个jpg图片与一个rar文件合并\n"); errno_t err; //errno_t是一个整型数据,代表错误代码,一般0就代表程序正常 FILE *fp1 = NULL; //建立文件指针 FILE *fp2 = NULL; FILE *fp3 = NULL; char s1[100], s2[100], s3[100];

文件压缩

 Heap.h: #pragmaonce #include<vector> #include<assert.h> //仿函数 template<class T> //小堆 struct Less {            bool operator()(const T& l, const T& r)           {                     return l < r;           } }; template<cl

ShellScript: 单行注释 & 多行注释

#!/bin/bash # 单行注释 & 多行注释 :<<! 此为多行注释 single-line comments & multiline comments <<标签 注释内容 标签 <<是here doc,把输入重定义到之前的命令 而:是空命令,则可以理解为注释. ! :<<\eof eof | ! | EOF | BLOCK,注意位置即可; 勿用单引号\' | 双引号\" | 大括号{} eof :<<NNNNNN

Window API串口编程

虽然使用诸如 CSerialPort VC串口类,MSComm VC 串口控件等非常方便,但有时这些控件并不适合自己的特殊需求,所以有必要了解一下基于Windows API的串口编程方法,下面介绍一下API串口编程的一般步骤及相关串口API函数. 串口操作一般有四步,分别是: 1) 打开串口 2) 配置串口 3) 读写串口 4) 关闭串口 1. 打开串口 在<VC 打开串口>一文中我们已经单独介绍过如果利用API打开串口的方法,打开串口是用API函数CreateFile来打开或创建的.该函数的

VC++串口通信编程详解

总结来看串口通信原理,(也可以说大多数通信原理也是如此). 通信首先要有个通信,可以简单的把通信看成一个小桶,发送方住水桶里装水,接收方从水桶中取水.如果你要和对方通信首先需要将桶盖打开,再将水装入到桶中,这时接收方才能够从桶中取到水.这里就存在着一定的问题, 1,如果桶盖还没有打开,发送方已经发送了.这时接收方再从桶中取水,肯定取的水不对,会不一部分缺失了.解决方式就是让桶盖打开再往其中加水. 2,但是桶盖何时打开,发送方何时发送,这个不好把握.解决方法:接收方接到数据时,要返回一个应答标志,