读取完最后一个数据后,fstream 仍处于正常状态,所以下一次 while 判断不会跳出,再次 fin>>x 时,fstream 发现没有数据可读,胡虚源此时才会设立 failbit。但由于已进入循环,虽然未读数据,x 仍保留上次的值,所以就又一次 pushback 了。
解决誉裂方法改变循环条件裤态即可:
while(fin>>x){
l.push_back(x)
}
c++里面用file.eof()来控制循环的做法,是一个不好的行为。 因为它是一种后知后觉的方式, 也就是说如果文件没有打开,姿拆 或者文件个格式有问题, 比如尾部都多出个空格, 由于file.eof()只是检测标迹贺枣记, 而上述情况,标记没有被设置, 因此就会继续执行。解决的方法有很多, 比如先读一下, while (getline(...)) {....} , 按你的情况, 其实应该在ReadGroup()里面作检测, 如果不愿意修改ReadGroup(), 有一个代价最小的做法:
//前提, 你的file是ifstrem的。
std:string line
while (file >>line)
{
file.push_back(line)
ReadGroup()
....
}
说实话, 对循环读这种方式, 尽量做到每次读多少个字节。 然后比较具体读出的字节数, 和期待值作比较, 就能发拍宏现问题。 即便要读到一个数据结构里面, C++的方式, 也应该封装到class里, 重载<<或>>。
当读到枝袭d(第一个字符)时,读取失败,输出bad data,try again.,然后你清除了错误标记,喊早但是文件流指针并没有移动,郑搭雀因此读到的始终是d这个字符。你应该加个cin.get()之类的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)