首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于ifstream的有关问题

2012-03-14 
关于ifstream的问题下面是出问题的代码,其中Record是自己定义的类,为了描述方便,将原先的私有变量都改写成

关于ifstream的问题
下面是出问题的代码,其中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类型有关?

[解决办法]
false存储的时候是0,fstream文件是文本文件,碰到0的时候会认为是文件尾到了,即fin.eof()为真,那肯定就退出循环了。
[解决办法]
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;
}

热点排行