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

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

ReadGroup();//读取一个数据块
Exchange();
Compute();
Histogram();
VectorClear();
}这是主函数部分
展开
 我来答
splashchaos
推荐于2016-07-20 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3664万
展开全部
c++里面用file.eof()来控制循环的做法,是一个不好的行为。 因为它是一种后知后觉的方式, 也就是说如果文件没有打开, 或者文件个格式有问题, 比如尾部都多出个空格, 由于file.eof()只是检测标记, 而上述情况,标记没有被设置, 因此就会继续执行。

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

std:string line;

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

ReadGroup();
....

}

说实话, 对循环读这种方式, 尽量做到每次读多少个字节。 然后比较具体读出的字节数, 和期待值作比较, 就能发现问题。 即便要读到一个数据结构里面, C++的方式, 也应该封装到class里, 重载<<或>>。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式