c++ 怎么判断是否文件结尾

文件中的数据是不定长的数据块,用子函数读取一个数据块,在main函数中用while(!file.eof())来循环,这却造成无限的循环,应该是读取的数据块直接超过了文件结尾标识符,请问怎么判断下一个字节是文件结尾,而且不会改变下次读取的数据准确性
while(!file.eof())
{

ReadGroup();//读取一个数据块
Exchange();
Compute();
Histogram();
VectorClear();
}这是主函数部分

c++里面用file.eof()来控制循环的做法,是一个不好的行为。 因为它是一种后知后觉的方式, 也就是说如果文件没有打开, 或者文件个格式有问题, 比如尾部都多出个空格, 由于file.eof()只是检测标记, 而上述情况,标记没有被设置, 因此就会继续执行。

解决的方法有很多, 比如先读一下, while (getline(...)) {....} , 按你的情况, 其实应该在ReadGroup()里面作检测, 如果不愿意修改ReadGroup(), 有一个代价最小的做法:
//前提, 你的file是ifstrem的。

std:string line;

while (file >> line)
{
file.push_back(line);

ReadGroup();
....

}

说实话, 对循环读这种方式, 尽量做到每次读多少个字节。 然后比较具体读出的字节数, 和期待值作比较, 就能发现问题。 即便要读到一个数据结构里面, C++的方式, 也应该封装到class里, 重载<<或>>。
温馨提示:内容为网友见解,仅供参考
无其他回答

c++如何判断文件末尾
使用标准库函数feof()可判断是否到达文件结尾。用法:include <stdio.h> int feof(FILE *stream);参数流 :FILE结构的指针。功能:feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值...

C++怎么用eof判断txt文件到文件结尾了没
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束...

在C++中文件函数eof的作用是什么,以及用法
C++ eof()函数可以帮助我们用来判断文件是否为空,抑或是判断其是否读到文件结尾。在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。

c++如何编程使得输入ctrl+z时使一个循环结束
判断条件写为:while((c=getchar())!=EOF);就可以用ctrl+z结束循环了 C语言中,EOF即文档的结尾.但是,当你写一个小程序,并以EOF作为判断条件时,就无法输入文档的结尾了,只能人工输入一个,这个人工输入的文档结尾就是Ctrl+Z 比如:include <stdio.h> int main(){ int c;do { printf("请输入...

如何在C++文件操作是判断是否到了每一行的结尾?
{ cerr<<"open error!"<<endl;exit(1);} while(!infile.eof()){ char *buf =new char[1024];infile.getline(buf,'\\r\\n');count++;} 这是我最近写的一个获取行数的代码。count为最後获取的行数。你看看有没有参考价值吧。不过我说一下,判断行的结束,我试过\\n是不行的,不准确。

C++中,eof怎样用的,我是用它来判断输入是否结束了!!
1、首先,在C语言编程软件中,定义一个布尔型变量,保存判断的结果。2、接着,定义一个字符型变量,保存输入的标识符。输入一个标识符,保存在变量id中。3、判断标识符的首字母,看它是否符合标识符要求。4、用for循环判断标识符的每个字符,看它是否符合标识符的要求。5、最后,如果判断结果为true,...

c++eof()函数对文件及字符串的处理解析
在C\/C++编程中处理文件时,`eof()`函数的使用对于判断文件是否为空或是否到达文件结尾至关重要。然而,操作过程中可能会遇到问题,如无法准确判断文件状态,这可能导致程序运行结果不稳定。例如,多输出一个字符或陷入死循环。输出结果分析显示,`eof()`函数的返回值可能会误导程序员。该函数返回true时,...

C++操作文件流的时候,seekg的时候怎么看是不是超过文件末尾了
1 ifstream 有个函数叫eofbit 你试试 我记得有。这个事判断文件到达结尾的函数。2 可以先获得文件大小,seekg前先判断跳的位置是否超出的文件的大小。

【C++学习笔记(四)】之EOF 与 feof的区别
EOF(-1)通常用于判断文本文件的结尾,因为ASCII码中没有-1的值。二进制文件中,存储的是数值,可能包含-1,因此不能使用EOF来判断文件结尾,而应使用feof函数。点击文章,关注我CV小鸽,获取更多关于CV、深度学习、编程学习笔记,还有海量源码等你来拿!让我们一起学习,共同进步!

C++中!file.eof()什么意思?
代码要贴完整。eof()函数返回文件指针是否已到末尾,是返回true。一般这么用的 while(!file.eof()) { file.read(ch);}

相似回答