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

news2024/10/2 8:38:14

文章目录

  • 前言
  • 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,要求处理EOF
	FILE* fp = fopen("test.txt", "r");
	if (!fp) {
		perror("File opening failed");
		return EXIT_FAILURE;
	}

	//fgetc 当读取失败的时候或者遇到⽂件结束的时候,都会返回EOF
	while ((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 。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统使用内网穿透配置Mysql公网地址实现IDEA远程连接

文章目录 前言1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql5. 固定连接公网地址6. 固定地址连接测试 前言 IDEA作为Java开发最主力的工具&#xff0c;在开发过程中需要经常用到数据库&#xff0c;如Mysql数据库&#xff0c;但是在IDEA中只能…

【Python学习手册(第四版)】学习笔记15-文档(注释、PyDoc等)

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍程序的文档概念。包括为程序编写的注释&#xff0c;以及内置工具的文档。讲解文档字符串、Python的在线手册等资源、以及PyDoc的help函数和网页接口。…

蒙电通无人机航线规划系统 雷达点云电力应用软件

蒙电通无人机航线规划系统&#xff0c;它可进行标记杆塔、切档、自动对点云数据分类和点云抽稀等处理&#xff0c;按3张或6张照片自动生成航线&#xff0c;或按自定义航线模型生成航线&#xff0c;支持安全性检测。在满足当地巡检标准的前提下&#xff0c;系统操作非常简便。 …

llama神经网络的结构,llama-3-8b.layers=32 llama-3-70b.layers=80; 2000汉字举例说明

目录 llama-3-8b.layers=32 llama-3-70b.layers=80 llama神经网络的结构 Llama神经网络结构示例 示例中的输入输出大小 实际举例说明2000个汉字文本数据集 初始化词嵌入矩阵 1. 输入层 2. 嵌入层 3. 卷积层 4. 全连接层 llama-3-8b.layers=32 llama-3-70b.laye…

跑深度学习模型Ⅲ:正确安装与torch版本对应的其他torch包

pytorch的正确安装可以回看我前面的博客跑深度学习模型Ⅱ&#xff1a;一文安装正确pytorch及dgl-CSDN博客 这篇博客将安装torch_grometric&#xff0c;torch_scatter, torch_sparse, torch_cluster库 1. 查看自己的torch版本 进入cmd 切换到要用的python环境中&#xff0c;输…

ADB Installer 0 file(s)copied

在为泡面神器刷安卓&#xff0c;做准备工作装ADB时报错了&#xff0c;以下是报错提示 再用cmd命令adb version验证下&#xff0c;提示adb不是有效命令&#xff0c;百分百安装失败了&#xff0c;往上各种搜索查询均没有对症的&#xff0c;其中也尝试了安装更新版本的&#xff0c…

2024版本IDEA创建Servlet模板

IDEA 版本 2024.1.4 新版本的 IDEA 需要自己创建 Servlet 模板 旧版本 IDEA 看我这篇文章&#xff1a;解决IDEA的Web项目右键无法创建Servlet问题_2024idea无法创建servlet项目-CSDN博客文章浏览阅读216次&#xff0c;点赞7次&#xff0c;收藏3次。解决IDEA的Web项目右键无法创…

AGI思考探究的意义、价值与乐趣 Ⅴ

搞清楚模型对知识或模式的学习与迁移对于泛化意味什么&#xff0c;或者说两者间的本质&#xff1f;相信大家对泛化性作为大语言模型LLM的突出能力已经非常了解了 - 这也是当前LLM体现出令人惊叹的通用与涌现能力的基础前提&#xff0c;这里不再过多赘述&#xff0c;但仍希望大家…

【Python学习手册(第四版)】学习笔记14-迭代器和列表解析(一)

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要以通俗易懂的语言介绍迭代器&#xff08;文件迭代、手动迭代iter和next等&#xff09;&#xff0c;列表解析式包括基础知识包括写法、文件上使用列表解析…

繁简之争:为什么手机芯片都是 ARM

RISC 和 CISC 指令集 之前的文章《揭秘 CPU 是如何执行计算机指令的》中说到&#xff0c;如果从软件的角度来讲&#xff0c;CPU 就是一个执行各种计算机指令&#xff08;Instruction Code&#xff09;的逻辑机器。 计算机指令集是计算机指令的集合&#xff0c;包括各种类型的…

Redis进阶(四):哨兵

为了解决主节点故障&#xff0c;需要人工操作切换主从的情况&#xff1b;因此需要一种方法可以自动化的切换&#xff1a;哨兵的引入大大改变这种情况。 哨兵的基本概念 自动切换主从节点 哨兵架构 1、当一个哨兵节点发现主节点挂了的时候&#xff0c;还需要其他节点也去检测一…

Cyber Weekly #18

赛博新闻 1、Google 狂卷小模型&#xff0c;2B 参数 Gemma 2 赶超 GPT-3.5 Google本周发布了开源的轻量级、高性能模型 Gemma 2 2B。它拥有 20 亿参数&#xff0c;是从更大规模的模型中提炼而来的&#xff0c;在 LMSYS 大模型竞技场的得分超越了 GPT-3.5 和 Mixtral 8x7B。该…

【12.PIE-Engine案例——加载Landsat 7 SR单景影像】

原始路径 欢迎大家登录航天宏图官网查看本案例原始来源 最后结果 具体代码 /*** File : Landsat7SRImage* Time : 2020/7/21* Author : piesat* Version : 1.0* Contact : 400-890-0662* License : (C)Copyright 航天宏图信息技术股份有限公司* Desc …

429总线协议

传输方式 单向方式&#xff1a;信息只能从通信设备的发送口输出&#xff0c;经传输总线传至与它相连的需要该信息的其他设备的接口。在两个通信设备间需要双向传输时&#xff0c;则每个方向上各用一个独立的传输总线。 编码方式 信号从高电平回归零电平表示逻辑状态1&#x…

卡码网--数组篇(移除元素)

系列文章目录 文章目录 系列文章目录前言27. 移除元素总结 前言 代码随想录:详情链接 27. 移除元素 力扣27 https://leetcode.cn/problems/remove-element/description/ Step1: 读题: 原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的…

MySQL基础练习题22-第二高的薪水

目录 题目 准备数据 分析数据 题目 查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水&#xff0c;查询应该返回 null(Pandas 则返回 None) 。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Employee (id int, sa…

JavaDS —— AVL树

前言 本文章将介绍 AVL 树的概念&#xff0c;重点介绍AVL 树的插入代码是如何实现的&#xff0c;如果大家对 AVL 树的删除&#xff08;还是和二叉搜索树一样使用的是替换删除法&#xff0c;然后需要判断是否进行旋转调整&#xff09;感兴趣的话&#xff0c;可以自行去翻阅其他…

WaitGroup

第一节&#xff1a;WaitGroup 概述 1. WaitGroup 简介 WaitGroup 是 Go 语言标准库 sync 包中的一个并发同步工具&#xff0c;它用于协调主 goroutine 与多个工作 goroutine 的执行。通过计数器跟踪还未完成的工作 goroutine 的数量&#xff0c;WaitGroup 能够确保主 goroutin…

Mybatis-Plus-常用的注解:@TableName、@TableId、@TableField、@TableLogic

1、TableName 经过之前的测试&#xff0c;在使用MyBatis-Plus实现基本的CRUD时&#xff0c;我们并没有指定要操作的表&#xff0c;只是在Mapper接口继承BaseMapper时&#xff0c;设置了泛型User&#xff0c;而操作的表为user表由此得出结论&#xff0c;MyBatis-Plus在确定操作…

宝塔8.0开心版安装命令

使用方法 Centos安装脚本 yum install -y wget \&\& wget -O install.sh https://BTKXB.com/install/install_6.0.sh \&\& sh install.sh Ubuntu/Debian安装脚本 wget -O install.sh https://BTKXB.com/install/install_6.0.sh \&\& bash install.…