lixiaoru
2011/9/16 13:35:16
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
}
如果你的BOOK是一个结构体,请你注意STRUCT的字节对齐问题,呵呵
hubin026
2011/9/17 8:21:12
我这个学期才学的C++,,请问字节对齐问题是什么啊?BOOK我是定义为结构体的.
struct book
{
string bookprice,bookname,bookpublish,bookauthor;
int booknum;
};
这是我的结构体..
swj123chl
2011/9/18 14:08:23
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照着改一下吧