c++ 怎么判断是否文件结尾
文件中的数据是不定长的数据块,用子函数读取一个数据块,在main函数中用while(!file.eof())来循环,这却造成无限的循环,应该是读取的数据块直接超过了文件结...
文件中的数据是不定长的数据块,用子函数读取一个数据块,在main函数中用while(!file.eof())来循环,这却造成无限的循环,应该是读取的数据块直接超过了文件结尾标识符,请问怎么判断下一个字节是文件结尾,而且不会改变下次读取的数据准确性
while(!file.eof())
{
ReadGroup();//读取一个数据块
Exchange();
Compute();
Histogram();
VectorClear();
}这是主函数部分 展开
while(!file.eof())
{
ReadGroup();//读取一个数据块
Exchange();
Compute();
Histogram();
VectorClear();
}这是主函数部分 展开
1个回答
展开全部
c++里面用file.eof()来控制循环的做法,是一个不好的行为。 因为它是一种后知后觉的方式, 也就是说如果文件没有打开, 或者文件个格式有问题, 比如尾部都多出个空格, 由于file.eof()只是检测标记, 而上述情况,标记没有被设置, 因此就会继续执行。
解决的方法有很多, 比如先读一下, while (getline(...)) {....} , 按你的情况, 其实应该在ReadGroup()里面作检测, 如果不愿意修改ReadGroup(), 有一个代价最小的做法:
//前提, 你的file是ifstrem的。
std:string line;
while (file >> line)
{
file.push_back(line);
ReadGroup();
....
}
说实话, 对循环读这种方式, 尽量做到每次读多少个字节。 然后比较具体读出的字节数, 和期待值作比较, 就能发现问题。 即便要读到一个数据结构里面, C++的方式, 也应该封装到class里, 重载<<或>>。
解决的方法有很多, 比如先读一下, while (getline(...)) {....} , 按你的情况, 其实应该在ReadGroup()里面作检测, 如果不愿意修改ReadGroup(), 有一个代价最小的做法:
//前提, 你的file是ifstrem的。
std:string line;
while (file >> line)
{
file.push_back(line);
ReadGroup();
....
}
说实话, 对循环读这种方式, 尽量做到每次读多少个字节。 然后比较具体读出的字节数, 和期待值作比较, 就能发现问题。 即便要读到一个数据结构里面, C++的方式, 也应该封装到class里, 重载<<或>>。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询