EOF是什么?

(保姆式教程:从下数据到画图)python如何利用EOF分析SSTA海温异常现象并画图 保姆式教程,教你如何利用python分析1979-2004年的太平洋地区的海温异常SSTA,并且绘制出空间模态和时间序列的图片。 阅读详情

c++ primer第一章有一段不定读取输入数据的代码,类似如下

<pre name="code" class="cpp">while(std::cin>>value)
{
     //do sth
}

 

文中说当遇到文件结束符的时候会停止读入。这个文件结束符号就是EOF了,那么到底什么是EOF哪?本来想写,一看阮一峰写的挺好,我就转到这里来。原来的链接在

http://www.ruanyifeng.com/blog/2011/11/eof.html


我学习C语言的时候,遇到的一个问题就是EOF。
它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。


比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。

  int c;
  while ((c = fgetc(fp)) != EOF)
       {
    putchar (c);
  }


很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。
但是,后来我发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。
  #define EOF (-1)
于是,我就困惑了。
如果EOF是一个特殊字符,那么假定每个文本文件的结尾都有一个EOF(也就是-1),还是可以做到的,因为文本对应的ASCII码都是正值,不可能有负值。但是,二进制文件怎么办呢?怎么处理文件内部包含的-1呢?
这个问题让我想了很久,后来查了资料才知道,在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回的一个信号值(也就是-1)。至于系统怎么知道文件的结尾,资料上说是通过比较文件的长度。
所以,处理文件可以写成下面这样:
  

int c;
  while ((c = fgetc(fp)) != EOF) {
    do something
  }


这样写有一个问题。fgetc()不仅是遇到文件结尾时返回EOF,而且当发生错误时,也会返回EOF。因此,C语言又提供了feof()函数,用来保证确实是到了文件结尾。上面的代码feof()版本的写法就是:
  
int c;
  while (!feof(fp)) {
    c = fgetc(fp);
    do something;
  }


但是,这样写也有问题。fgetc()读取文件的最后一个字符以后,C语言的feof()函数依然返回0,表明没有到达文件结尾;只有当fgetc()向后再读取一个字符(即越过最后一个字符),feof()才会返回一个非零值,表示到达文件结尾。
所以,按照上面这样写法,如果一个文件含有n个字符,那么while循环的内部操作会运行n+1次。所以,最保险的写法是像下面这样:
 
 int c = fgetc(fp);
  while (c != EOF) {
    do something;


    c = fgetc(fp);
  }
  if (feof(fp)) {
    printf("\n End of file reached.");
  } else {
    printf("\n Something went wrong.");
  }


除了表示文件结尾,EOF还可以表示标准输入的结尾。
 
 int c;
  while ((c = getchar()) != EOF) {
    putchar(c);
  }


但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。
Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了。

Python学习笔记——eofs.standard的使用 阅读详情

相关推荐

关于EOF的那点事

介绍 初学C++,C语言的程序员在优快云、SegmentFault上提的最多的问题便是 如何在读取用户输入或读取文件时处理EOF(End-of-file,文件结尾)条件? 然而,几乎所有的此类问题都体现了提问者对EOF这个概念的完全误解。本文章试着解释这个令人迷惑的问题。 辟谣!EOF字符 初学者对EOF的第一个误解就是“EOF字符” — 简单地说,总有人觉得EOF是一个字符,实际上“EOF...

weixin_44252561的博客 1817

C++的文件结尾EOF

C++的文件结尾EOF

little_startoo的博客 2992

EOF的用法

1、在命令行环境下,使用cat &lt;&lt;EOF 和 cat &lt;&lt;-EOF,两个都是获取stdin,并在EOF处结束stdin,输出stdout。 在我们使用cat &lt;&lt;EOF时,我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。比如,下面的语句就不会出错:例1:[plain] view plain copy...

Yuan_yun的博客 4560

C语言中EOF什么意思

在C语言中,或更精确地说成C标准函数库中表示文件结束符(end offile)。 在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。 举例:C语言,输入多组数据,每行两个,然后对应每行一个输出结...

xiachong27的博客 5万+

c语言中eof的作用,深入解读C语言中的符号常量EOF

EOF是指文件的结束符,是一个宏定义借助于getchar 与putchar 函数,可以在不了解其它输入/输出知识的情况下编写出数量惊人的有用的代码。最简单的例子就是把输入一次一个字符地复制到输出,其基本思想如下:读一个字符while (该字符不是文件结束指示符)输出刚读入的字符读下一个字符将上述基本思想转换为C语言程序为:#include /* copy input to output; 1st ...

weixin_32687283的博客 3092

解析器异常:语法错误,期望 ‘)‘,位置,行,列,令牌 EOF Java

在本文中,我们讨论了com.alibaba.druid.sql.parser.ParserException异常,它是阿里巴巴Druid数据库连接池中的一个异常类。我们演示了如何捕获和处理该异常,并提供了一个示例代码来说明这个过程。在本文中,我们将探讨一个特定的解析器异常:com.alibaba.druid.sql.parser.ParserException,并了解如何处理它。通过使用try-catch块来捕获解析器异常,我们可以优雅地处理语法错误,并提供有用的错误信息,以帮助我们调试和修复代码。

CdiBug的博客 896

关于EOF

EOF(End of File),是ASCII码中的替换字符(Control-Z,代码26)。 EOF不是特殊字符,而是定义在<stdio.h>中的一个常量,一般等于-1。#define EOF (-1) 以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作...

咕咕怪的博客 5748

介绍七种常见还危险的病毒(带样本)

简介:能够感染用户计算机bai系统中的.exe、.dll和.html文件,将自身加密以后缀加到目标文件中。样本(源文件):https://wwx.lanzoux.com/iJx4njrpz1c / https://wwx.lanzoui.com/iYRNLwd8ldc。英文名称:Virus.Win32.Viking.A(标准) / Worm.Win32.Fujack.A(标准)英文名称:Net-Worm.Win32.Blaster.A(标准)/ Lovesan.A/ Msblast.A。

2301_78858007的博客 8526

python eof是什么_EOF是什么?

我学习C语言的时候,遇到的一个问题就是EOF。它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。int c;while ((c = fgetc(fp)) != EOF) {putchar (c);}很自然地,我就以为,每个文件的结尾...

weixin_39926739的博客 6340

Mac版Burp Suite专业版破解与汉化完整指南

在Web安全测试领域,Java应用程序的许可证验证机制与本地化实现是常见的技术课题。其原理通常涉及Java Agent技术,通过在JVM启动时动态修改字节码,实现对软件授权状态的校验逻辑进行拦截与重写,从而绕过官方验证。同时,软件界面的国际化(i18n)与本地化(l10n)则依赖于资源文件的替换与加载。从技术价值角度看,深入理解这些机制不仅能满足特定场景下的工具定制需求,更能加深对Java安全机制、软件保护与逆向工程的理解。在实际的工程实践中,安全研究人员与开发者常面临功能受限或语言障碍的挑战,尤其是在渗透

weixin_29327525的博客 1062

手把手教你用PlantVillage数据集搭建农作物病害识别模型(Python实战)

本文详细介绍了如何使用PlantVillage数据集和Python构建农作物病害识别模型。从环境准备、数据获取到模型构建、训练与评估,手把手教你实现一个实用的农业AI应用。特别针对PlantVillage数据集的特点,提供了处理类别不平衡、图像预处理和模型优化的实战技巧,帮助开发者快速掌握农作物病害识别技术。

weixin_29184371的博客 481

EOF

>> 关于文件结束符EOF EOF 是 End Of File 的缩写。 在C语言中,它是在标准库中定义的一个宏。 人们经常误认为 EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如 -1)。EOF 也不是文件中实际存在的内容。EOF 也不是只表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),它还能表

s200820212的专栏 4690

SAP生产订单成本‘还原’实战:从标准成本到实际费用,一步步拆解差异来源(附物料分类账提示)

本文深入解析SAP生产订单成本差异分析的全过程,从标准成本到实际费用的追踪方法,揭示差异根源的六维分析法。特别强调物料分类账(CKMLCP)在成本还原中的关键作用,帮助财务人员精准定位价格差异、用量差异等问题,提升制造业成本管理的效率和准确性。

weixin_28705087的博客 535

eof函数

eof函数查看最后一次读文件操作是否为文件最后一个记录,如果是,则返回非零值,如果文件还有内容,返回零。一般情况下,对eof的调用不加括号,因为eof和eof()是等效的,但与<>操作符一起使用时,eof和e...

conghai7026的博客 3520

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握

本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求;

getusushu的博客 418

【YOLO26科研级突破】集成BiFPN双向特征金字塔,让多尺度特征融合效率与精度双跃升

打开确保模型解析器能识别BiFPN模块。通过将BiFPN双向特征金字塔集成到YOLO26中,我们实现了一个“全尺度双向特征流动+加权融合+精准检测”的目标检测模型。这个改进不仅在工程上能大幅提升多尺度、复杂场景下的检测精度,更在科研上提供了“双向特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

LXY_LOVE36的博客 201

java 文件结束符 eof_文件结束符EOF .

>> 关于文件结束符EOFEOF 是 End Of File 的缩写。在C语言中,它是在标准库中定义的一个宏。人们经常误认为EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如 -1)。EOF 也不是文件中实际存在的内容。EOF 也不是只表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),它还能表示 I/O 操...

weixin_42520796的博客 4633

【论文精读】Virtual Adversarial Training——一种用于监督学习和半监督学习的正则化方法

本文提出了一种新的正则化方法——虚拟对抗训练(Virtual Adversarial Training, VAT),旨在通过引入虚拟对抗损失来增强模型的泛化能力。虚拟对抗损失衡量了给定输入条件下条件标签分布的局部平滑性,定义为模型对输入数据点周围局部扰动的鲁棒性。与传统对抗训练不同,VAT不需要标签信息来定义对抗方向,因此适用于半监督学习。本文详细阐述了VAT的核心方法,并通过实验验证了其在多个基准数据集上的有效性。:虚拟对抗训练;正则化方法;监督学习;半监督学习;对抗方向。

nmdbbzcl的博客 366

linux socket eof,Linux 中的 EOF 到底是什么?

EOF 的定义EOF 是 end of file 的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin)。以前在学习 C 语言文件操作的时候,一直记得 EOF 就是一个标记,通过它可以判断程序是否读取到文件的末尾了,例如下面的这段代码就是将一个文本文件中的字符输出到标准输出中,并通过 EOF 来判断程序是否读到了文件末尾:#inclu...

weixin_39620334的博客 2310

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2054

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

关于EOF结束

首先我们需要了解什么是EOF结束:EOF 是 End Of File 的缩写。在C语言中,它是在标准库中定义的一个宏,这个宏是一个表示已经到达文件结束的负整数。具体使用方法如下: windows系统下,在输入回车换行后的空行位置,按 ctrl+z,再回车确认。 linux系统下,在输入回车换行后的空行位置,按 ctrl+d。 在C语言中想要连续输入输出,在最后就需要使用EOF结束了,代码示例如下: #include<stdio.h> int main() { int a; whi

Wistain的博客 3695

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Shell中的EOF用法

在脚本中可以使用echo往一个文件中自动输入N行内容,当然前提是少数的几行内容.如果需要追加很多行,用echo追加的方式就显得比较无力了,这时候就可以考虑借助EOF和cat来进行多行内容的追加. 输入重定向 要理解EOF的用法,先理解一下输入重定向,输入重定向就是改变输入的方向.不再使用键盘作为命令输入的来源,而是使用文件来作为命令的输入,Bash支持的输入重定向夫符号如下: commanad &...

锋子 7395

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

EOF的意义及用法

c/c++ 中EOF的意义及用法 EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。 在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Control-Z,代...

Tsingke 2071
上一篇: Ubuntu 安装 JDK 7 / JDK8 的两种方式
下一篇: 创业公司有哪些常见的散伙原因?
Code_My_Life
博客等级 码龄12年 43粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值