当前位置: 首页 > news >正文

【C语言】详解feof函数和ferror函数

文章目录

  • 前言
  • 1. feof
    • 1.1 feof函数原型
    • 1.2 正确利用函数特性读写文件
      • 1.2.1 针对文本文件
      • 1.2.2 针对二进制文件
    • 1.3 feof函数的原理
    • 1.4 feof函数实例演示
  • 2. ferror
    • 2.1 ferror函数原型

前言

或许我们曾在网络上看过有关于feof函数,都说这个函数是检查文件是否已经读取结束了。但事实却并非如此,要想知道更多的细节,那就往下看看吧!探索

1. feof

谨记:在读取文件的过程中,feof的返回值不是用于判断文件是否读取结束。

feof函数是判断文件在读取的过程中给是否是遇到了文件结束标志(EOF)。但是文件读取结束的原因不仅仅是因为遇到了文件结束标志,还可能是因为遇到了各种文件在读取过程中发生的错误所导致文件读取提前结束的。

很多人误用这个函数来判断文件内容是否为空,换句话说,就是判断这个文件是否为空文件!

feof函数作用:当文件读取结束时,判断文件读取结束的原因是否是:遇到了文件结束结束标志

1.1 feof函数原型

feof函数原型
feof函数的形参和返回值
在文件光标处遇到文件末尾标记时,feof函数返回一个非0值,否则返回0值。

1.2 正确利用函数特性读写文件

1.2.1 针对文本文件

对于文本文件来说,文件读取结束时可能会返回EOF(fgetc),或者返回NULL(fgets)

  • fgetc判断是否为EOF
  • fgets判断返回值是否为NULL

1.2.2 针对二进制文件

对于二进制文件来说,判断的方法就比较单一了。用fread函数。

fread函数判断其规定读取的个数(也就是fread的返回值)是否大于实际读取的个数,如果大于的话,就说明文件读取结束了。

1.3 feof函数的原理

feof()原理函数:并不是通过读取到文件的EOF来评判,这个文件是否为空。对feof()来说,它的工作原理是,站在光标所在位置,向后看看还有没有字符。如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。

1.4 feof函数实例演示

#include <stdio.h>
#include <stdlib.h>
int main(void)
{int c; // 注意:int,⾮char,要求处理EOFFILE* fp = fopen("test.txt", "r");if (!fp) {perror("File opening failed");return EXIT_FAILURE;}//fgetc 当读取失败的时候或者遇到⽂件结束的时候,都会返回EOFwhile ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环{putchar(c);}printf("\n");//判断是什么原因结束的if (ferror(fp))puts("I/O error when reading");else if (feof(fp))puts("End of file reached successfully");fclose(fp);fp = NULL;return 0;
}

2. ferror

在讲解feof函数的实例演示时,在例子中出现了一个ferror,那这个函数又是干嘛的?我们就来探讨一下。

还记得,在讲标准流时,提到过stderr标准错误流,这是一个根据系统遇到错误,而通过器编译器内部提早定义的宏自动对应上错误信息。

那么在文件缓冲系统中,自然也有这么一个设定。可是它这个就没有那么智能了。我们把这个就称作为文件错误标志。

ferror函数作用:在文件读取结束时,检查是否是因为遇到了文件错误标志。

2.1 ferror函数原型

ferror函数原型
ferror函数的形参和返回值
ferror的返回值为非0值时,就说明遇到了文件错误标志了,否则返回0 。

这个例子就不过多展示了,大家可以结合前面的例子进行分析。

如果大家觉得写的还不错的话,麻烦给偶点个赞吧!!!❤️❤️💖

相关文章:

【C语言】详解feof函数和ferror函数

文章目录 前言1. feof1.1 feof函数原型1.2 正确利用函数特性读写文件1.2.1 针对文本文件1.2.2 针对二进制文件 1.3 feof函数的原理1.4 feof函数实例演示 2. ferror2.1 ferror函数原型 前言 或许我们曾在网络上看过有关于feof函数&#xff0c;都说这个函数是检查文件是否已经读…...

ValueListenableBuilder 和 addListener 在 ChangeNotifier的区别

1、前言 ValueListenableBuilder 和 addListener 在 ChangeNotifier 中有不同的用途和用法&#xff0c;适用于不同的场景。它们的主要区别在于它们如何监听和响应状态变化&#xff0c;以及它们的用法和特性。 2、ValueListenableBuilder用法 ValueListenableBuilder 是一个 …...

ScriptEcho:AI赋能的前端代码生成神器

ScriptEcho&#xff1a;AI赋能的前端代码生成神器 在前端开发中&#xff0c;如果你总是觉得写代码太费时费力&#xff0c;那么 ScriptEcho 将成为你的救星。这个 AI 代码生成平台不仅能帮你省下大量时间&#xff0c;还能让你轻松愉快地写出生产级代码。本文将带你了解 ScriptEc…...

TypeError: ‘float’ object is not iterable 深度解析

TypeError: ‘float’ object is not iterable 深度解析与实战指南 在Python编程中&#xff0c;TypeError: float object is not iterable是一个常见的错误&#xff0c;通常发生在尝试对浮点数&#xff08;float&#xff09;进行迭代操作时。这个错误表明代码中存在类型使用不…...

灵茶八题 - 子序列 +w+

灵茶八题 - 子序列 w 题目描述 给你一个长为 n n n 的数组 a a a&#xff0c;输出它的所有非空子序列的元素和的元素和。 例如 a [ 1 , 2 , 3 ] a[1,2,3] a[1,2,3] 有七个非空子序列 [ 1 ] , [ 2 ] , [ 3 ] , [ 1 , 2 ] , [ 1 , 3 ] , [ 2 , 3 ] , [ 1 , 2 , 3 ] [1],[…...

为什么美元债务会越来越多?

美元债务规模持续膨胀&#xff0c;其背后原因复杂多样&#xff0c;可归结为以下几个主要因素&#xff1a; 财政赤字和刺激政策是导致美元债务增加的重要原因。美国政府长期面临财政赤字问题&#xff0c;支出远超收入&#xff0c;为弥补这一缺口&#xff0c;政府不得不大量发行…...

二维凸包算法 Julia实现

问题描述&#xff1a;给定平面上 n n n 个点的集合 Q Q Q&#xff0c;求其子集 P P P 构成 Q Q Q 的凸包&#xff0c;即 ∀ p ∈ Q , ∃ p 0 , p 1 , p 2 ∈ P \forall p \in Q, \exist p_0, p_1, p_2 \in P ∀p∈Q,∃p0​,p1​,p2​∈P 使得点 p p p 在以点 p 0 , p 1 …...

python dash框架

Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发&#xff0c;并且可以用来构建交互式的 web 应用程序&#xff0c;这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点&#xff1a; 易于使用&#xff1a;Dash 使用 Python 语法…...

2.外部中断(EXTI)

理论 NVIC&#xff1a;嵌套向量中断控制器&#xff08;解释教程&#xff09; 外部通用中断线(EXTI0~EXTI15)&#xff1a;每个GPIO设置成中断模式&#xff0c;与中断控制器连接的线 外部中断触发方式 上升沿触发、下降沿触发、双边沿触发 外部中断触发函数 在stm32f1xx_it.c文件…...

Python | SyntaxError: invalid syntax 深度解析

Python | SyntaxError: invalid syntax 深度解析 在Python编程中&#xff0c;SyntaxError: invalid syntax是一个常见的错误&#xff0c;它表明Python解释器在尝试解析代码时遇到了语法问题。这个错误通常是由于代码中存在拼写错误、缺少符号&#xff08;如括号、冒号或逗号&a…...

付费进群系统源码原版最新修复全开源版

付费进群&#xff0c;和平时所见到的别人拉你进群是不一样的&#xff0c;付费进群需要先缴费以后&#xff0c;才会看到群的二维码&#xff0c;扫码进群或者是长按二维码图片识别进群&#xff0c;付费进群这个功能广泛应用于拼多多的砍价群&#xff0c;活动的助力群&#xff0c;…...

Docker容器部署的SpringBoot项目jar包,上传文件但是找不到路径的问题

在docker容器内部署的jar包运行后&#xff0c;请求访问都没有问题&#xff0c;在文件上传时&#xff0c;发现上传图片接口响应成功&#xff0c;但是图片路径报404错误&#xff0c;发现找不到路径。 在服务器上查看也没有找到相关图片。 原因&#xff1a; 启动docker镜像时没…...

云计算学习——5G网络技术

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 Day1 网络参考模型 Day2 网络综合布线与应用 Day3 IP地址 Day4 华为eNSP网络设备模拟器的基础安装及简单使用 Day5 交换机的基本原理与配置 Day6 路由器的原理与配置 Day7 网络层协议介绍一 Day8 传…...

matlab仿真 信道编码和交织(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第八章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; ​​​ ​ ​ ​ clear all N10;%信息比特的行数 n7;%hamming码组长度n2^m-1 m3;%监督位长度 [H,G]hammgen(m);%产生(n,n-…...

基于YOLOv8的高压输电线路异物检测系统

基于YOLOv8的高压输电线路异物检测系统 (价格88) 包含 【“鸟窝”&#xff0c;“风筝”&#xff0c;“气球”&#xff0c;“垃圾”】 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数…...

23款奔驰GLS450加装原厂电吸门配置,提升车辆舒适性和便利性

今天是一台22款奔驰GLS450&#xff0c;车主是佛山的 以前被不良商家坑了 装了副厂的电吸门 刚开始就很正常 用了半年之后 就开始开不了门&#xff0c;被锁在里面&#xff0c;刚开始车主以为是零件坏了 后来越来越频繁&#xff0c;本来是为了家里老人小孩关门方便而升级的&#…...

git操作流程笔记

1、在本地项目文件夹右击鼠标点击Git Bash Here 2、输入git init&#xff0c;这个目录变成git可以管理的仓库&#xff0c;会出现一个.git文件夹&#xff0c;如果没出现的话需要选择“显示隐藏文件”&#xff08;不会的同学自行百度一下&#xff09; 3、绑定本地仓库与远程仓库…...

【QT】常用控件-上

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 目录 &#x1f449;&#x1f3fb;QWidgetenabledgeometryrect制作上下左右按钮 window frame 的影响window titlewindowIcon代码示例: 通过 qrc 管理图片作为图标 windowOpacitycursor使用qrc自…...

帮助网站提升用户参与度的5个WordPress插件

仅靠编写精彩的内容、设计精美的图像和创建简化的客户旅程不足以提高网站参与度。您需要让用户在首次访问后继续与您的网站互动并成为回访者&#xff0c;才能真正吸引您所追求的兴趣。 幸运的是&#xff0c;对于 WordPress 用户来说&#xff0c;有数百种工具可用于提高用户参与…...

理解 Python 中的 @wraps:保留函数元数据

一.介绍 在本文中&#xff0c;我们将了解 wraps。在 Python 中使用装饰器时&#xff0c;您可能会遇到原始函数的元数据丢失的情况。这时&#xff0c;functools 模块中的 wraps 装饰器就可以派上用场了。让我们深入了解 wraps 的作用及其重要性。 二.简单装饰器的问题 首先&a…...

用STM32U5开发板做智能手表?这份保姆级教程和避坑指南请收好

基于STM32U5的智能手表开发实战&#xff1a;从零构建到低功耗优化 第一次拿到STM32U5开发板时&#xff0c;我被它名片大小的体积震惊了——这么小的板子真能跑动智能手表系统&#xff1f;三个月前&#xff0c;我带着这个疑问开始了自己的智能穿戴项目。现在我的原型机已经能稳定…...

RV1126开发板AP6256 WiFi驱动移植避坑全记录:从设备树到Buildroot配置

RV1126开发板AP6256 WiFi驱动移植实战指南&#xff1a;从硬件验证到系统调优 在嵌入式系统开发中&#xff0c;WiFi模块的移植往往是让开发者既期待又头疼的环节。特别是当面对RV1126这样的高性能AIoT平台与AP6256这类多功能无线模块的组合时&#xff0c;从硬件验证到软件配置的…...

Nginx配置实战:手把手教你修复CSP、X-XSS-Protection等10个常见安全响应头漏洞

Nginx安全响应头配置实战&#xff1a;10个关键漏洞修复指南 当安全扫描工具在你的Nginx服务器上标记出一连串"响应头缺失"警告时&#xff0c;那种感觉就像发现自家大门没锁一样令人不安。我曾为一家电商平台做安全审计&#xff0c;他们的扫描报告显示缺少8个关键安全…...

ROPES:嵌入式系统开发的模型驱动方法论

1. ROPES&#xff1a;嵌入式系统开发的革命性方法论在嵌入式系统开发领域&#xff0c;我们常常面临一个核心矛盾&#xff1a;如何在高可靠性的硬实时要求与快速迭代的市场需求之间找到平衡&#xff1f;传统瀑布式开发周期长、反馈慢&#xff0c;而完全敏捷的方法又难以满足嵌入…...

从DFMEA到PPAP:手把手拆解APQP核心工具链,让质量策划不再是纸上谈兵

从DFMEA到PPAP&#xff1a;手把手拆解APQP核心工具链&#xff0c;让质量策划不再是纸上谈兵 在汽车零部件行业&#xff0c;每当新产品开发项目启动时&#xff0c;工程师们总会面临一个共同的挑战&#xff1a;如何确保从设计到量产的每个环节都能有效预防质量问题&#xff1f;传…...

SSE接口实战踩坑记录:Vue3项目里EventSource怎么用?Java后端发送数据要注意啥?

Vue3与Java SSE实战&#xff1a;从原理到避坑指南 当实时数据推送成为现代Web应用的标配功能时&#xff0c;Server-Sent Events&#xff08;SSE&#xff09;技术凭借其轻量级和易用性重新回到开发者视野。不同于WebSocket的双向通信&#xff0c;SSE采用单向通道设计&#xff0c…...

2026 年网安必读!Metasploit 圣经第 2 版终于来了,AI 渗透直接封神

2026 年网安必读&#xff01;Metasploit 圣经第 2 版终于来了&#xff0c;AI 渗透直接封神 做网安、学渗透的人&#xff0c;几乎没人不知道Metasploit。 它是渗透测试界的“瑞士军刀”&#xff0c;是红蓝对抗、漏洞验证、安全评估的必备神器&#xff0c;也是从新手到资深工程师…...

Blender到Unity FBX导出终极指南:告别坐标错乱的完整解决方案

Blender到Unity FBX导出终极指南&#xff1a;告别坐标错乱的完整解决方案 【免费下载链接】blender-to-unity-fbx-exporter FBX exporter addon for Blender compatible with Unitys coordinate and scaling system. 项目地址: https://gitcode.com/gh_mirrors/bl/blender-to…...

Poe-OpenAI代理:统一多模型API调用与协议转换实战

1. 项目概述&#xff1a;当Poe遇上OpenAI API 如果你和我一样&#xff0c;既沉迷于Claude、ChatGPT这些大模型的能力&#xff0c;又对OpenAI官方API那套简洁统一的调用方式情有独钟&#xff0c;那你肯定也遇到过这个痛点&#xff1a;想用一个统一的接口去调用不同厂商、不同能…...

利用快马平台快速生成51单片机温湿度监测原型,加速硬件验证流程

利用51单片机快速搭建温湿度监测原型 最近在做一个智能家居的小项目&#xff0c;需要用到温湿度监测功能。作为嵌入式开发新手&#xff0c;我选择了经典的STC89C52单片机作为主控&#xff0c;搭配DHT11传感器和1602液晶屏来实现这个功能。整个过程让我深刻体会到&#xff0c;在…...