从文件读入数据块时用feof(fp)判断文件结尾真的保险吗?

2023-12-04 22:32

本文主要是介绍从文件读入数据块时用feof(fp)判断文件结尾真的保险吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天用文件输入时发现了一个值得注意的问题。

先看程序:

 
#include <stdlib.h>
#include <stdio.h>
int main(void) 
{FILE*in=fopen("1.txt","r");int a,b;if(in==NULL){printf("error:cannot open infile !\n");return -1;}  while(!feof(in)){fscanf(in,"%d %d",&a,&b);printf("%d %d\n",a,b);}      system("pause");return 0;
}

  再看文件1.txt中的内容:

1  2

3  4

5  6


你也许会认为输出的结果会是:

1  2

3  4

5  6

你有可能发现结果会是:

1  2

3  4

5  6

5  6

怎么最后一对数据出现两次?

因为程序从文件输入时一共输入了4次 比计划的3次多了一次。你打开文件1.txt检查发现数据只有3行

1  2

3  4

5  6

其实5  6的最后面还加了一个回车,回车是看不到的。

当程序从文件读入5  6后,文件还有一个回车符,所以这时文件还没结束。!feof(in)的值为真。所以接着从文件输入,

而文件指针此时指向的文件位置处没有两个int数据,所以输入失败 a和b还保存这上一次输入的值。就会出现上面看到的结果。

       其实,只要利用fscanf()自身的返回值判断就没有问题。

程序改为如下:

#include <stdlib.h>
#include <stdio.h>
int main(void) 
{FILE*in=fopen("1.txt","r");int a,b;if(in==NULL){printf("error:cannot open infile !\n");return -1;}  while(fscanf(in,"%d %d",&a,&b)==2){printf("%d %d\n",a,b);}      system("pause");return 0;
}

这时输出结果就入我们所料了。

       这时我写邻接表时犯的错误,找了好久才找到!

 

                                    

这篇关于从文件读入数据块时用feof(fp)判断文件结尾真的保险吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455144

相关文章

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1