请教各位,文件读取问题。。

2016-06-11 22:34:34 +08:00
 wemore
先上代码:
#include<iostream>
#include<string>
#include<vector>
#include<stdio.h>
#include<fstream>
using namespace std;
bool exists = false;//判定文件是否存在
int Fnum = 0;//数据总个数
class table{
private:
string user;
int num;
double biao[12];
public:
table() :user(""), num(0){
for (int i = 0; i < 12; i++)
biao[i] = 0;
}
table(string u, int n, double a[]) :user(u), num(n){
for (int i = 0; i < 12; i++)
biao[i] = a[i];
}
double getSum(){
double sum = 0;
for (int i = 0; i < 12; i++)
sum += biao[i];
return sum;
}
double getBiao(int i){
return biao[i];
}
void show(){
cout <<"用户名:" <<user << " 楼栋号:"<< num << endl;
}
};
vector<table> ta;

int main()
{
double a[12] = { 0 };
table c("wemore", 12, a); Fnum = 1;
//int x;
ofstream writeF("table.dat", ios::binary);
writeF.write((char*)&c, sizeof(table)*Fnum);
writeF.close();//测试数据

ifstream readF("table.dat", ios::binary);
exists = !readF.fail();
if (exists){
cout << "读到文件" << endl;
while (!readF.eof()){
cout << "运行了" << endl;
table tmp;
readF.read((char*)&tmp, sizeof(tmp));
readF.close();
ta.push_back(tmp);
//readF.seekg(sizeof(table), ios::cur);
}
ta[0].show();
readF.close();
}
else
cout << "文件不存在" << endl;
return 0;
}
一直有秘制报错,调试发现在 return 0 上,改成 void main 直接在最后一个大括号报错。。请大神帮忙看看,问题在哪。这个循环也莫名其妙循环两次,虽然我只有一个数据被写入文件
1495 次点击
所在节点    C
1 条回复
sfqtsh
2016-06-12 01:25:14 +08:00
读完 sizeof(table)个字符后,位置指针指向了 EOF 。只有再次尝试读时,此时读到 EOF 导致读取失败,使内部标志 eofbit 和 failbit 被 set ,这样以后 eof()才返回 1 。对于这种情况,你可以结合 good 或 fail 成员函数来判断。

还有 string 的内容一般存储在堆上的,你能输出成功只因为内容少而被保存于内部 buffer 中而已。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX