关于ifstream的问题

Tiny Monster Co. 2007-09-16 04:33:50
下面是出问题的代码,其中Record是自己定义的类,为了描述方便,将原先的私有变量都改写成公有变量的形式

Record rec;
ifstream fin(fileName);

for(i=0;!fin.eof();i++)
{
fin.seekg(i*sizeof(Record),ios_base::beg);
fin.read((char *)&rec,sizeof(Record));

if(!fin.eof())
{
if(rec.exist) //exist是布尔类型
cout<<setiosflags(ios_base::left)<<setw(15)<<rec.itsName<<endl;
}
}
运行时发现,只要中间有一条记录的exist是false,后面的记录就都打印不出来了
如果把if(rec.exist)删除,则全部能打印出来。

请问这是怎么回事?与ifstream类有关,还是与bool类型有关?
...全文
312 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiny Monster Co. 2007-09-22
  • 打赏
  • 举报
回复
谢谢~~
taodm 2007-09-19
  • 打赏
  • 举报
回复
ifstream fin(fileName, ios_base::binary);
读/写这个文件的时候都要加binary标志
while (fin.read((char *)&rec,sizeof(Record)))
{
if(rec.exist) //exist是布尔类型
cout<< std::left <<setw(15)<<rec.itsName<<endl;
}
Tiny Monster Co. 2007-09-19
  • 打赏
  • 举报
回复
应该用什么方法判断?
yevv 2007-09-16
  • 打赏
  • 举报
回复
你可以改用其他方法判断文件尾
yevv 2007-09-16
  • 打赏
  • 举报
回复
false存储的时候是0,fstream文件是文本文件,碰到0的时候会认为是文件尾到了,即fin.eof()为真,那肯定就退出循环了。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧