会C++的进来看下啊,,谢谢...
  • 浏览:710 评论:8 人
  • void browse(fstream f)
    {
    book bookdata;
    f.seekg(0,ios::end);
    long posEnd=f.tellg();
        f.seekg(0,ios::beg);
        do
    {f.read((char *)&bookdata,sizeof(book));
    cout<<bookdata.booknum<<'\t'<<bookdata.bookname<<'\t'<<bookdata.bookpublish
      <<'\t'<<bookdata.bookauthor<<'\t'<<bookdata.bookprice<<endl;
    }while(f.tellp()!=posEnd);//这里编译时老是出现'!=' : 2 overloads have similar conversions
    }

    struct book
    {
            string bookprice,bookname,bookpublish,bookauthor;
            int booknum;
    };
    这是我的结构体..

    struct a{int,int,char,int}中的sizof(a)并不就等于3*sizeof(int)+sizeof(char)哦,不信你做做试验,,具体如何对齐,,你搜下书或百度吧,,自己搞懂问题,学习会深刻一点心

    读取文件的常规流程是:
    1打开文件open
    2从头开始读seek
    3文件结束了吗?没有继续,否则跳到5 eof
    4读取数据,并处理,返回3 read(一般和3配合用do结构)
    5关闭文件。close
    因为文件大小不一定刚好是整数个book结构体大小的倍数,最好还是判断文件是否结束吧,另外一般通过read的返回值和sizeof的大小比较以保证读取到的完整的一个结构体数据。
    就说这么多,LZ照着改一下吧