会C++的进来看下啊,,谢谢...

- lixiaoru LV.排长
- 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 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
}

- 马菲羊
- 2011/9/16 23:34:15
如果你的BOOK是一个结构体,请你注意STRUCT的字节对齐问题,呵呵

- hubin026
- 2011/9/17 8:21:12
我这个学期才学的C++,,请问字节对齐问题是什么啊?BOOK我是定义为结构体的.

- 小不懂
- 2011/9/17 22:19:55
struct book
{
string bookprice,bookname,bookpublish,bookauthor;
int booknum;
};
这是我的结构体..
{
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)哦,不信你做做试验,,具体如何对齐,,你搜下书或百度吧,,自己搞懂问题,学习会深刻一点心

- bushibayun
- 2011/9/19 3:08:37
恩啊,,,谢谢...

- naizong
- 2011/9/20 1:14:33
我看了,,也懂大概了,,,可是我还是不知道怎么改...

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

- yuyut
- 2011/9/21 1:23:45
问题解决了,,谢谢各位.