这是一个创建于 3088 天前的主题,其中的信息可能已经有所发展或是发生改变。
先上代码:
#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 直接在最后一个大括号报错。。请大神帮忙看看,问题在哪。这个循环也莫名其妙循环两次,虽然我只有一个数据被写入文件
1 条回复 • 2016-06-12 01:25:14 +08:00
|
|
1
sfqtsh 2016-06-12 01:25:14 +08:00 via Android
读完 sizeof(table)个字符后,位置指针指向了 EOF 。只有再次尝试读时,此时读到 EOF 导致读取失败,使内部标志 eofbit 和 failbit 被 set ,这样以后 eof()才返回 1 。对于这种情况,你可以结合 good 或 fail 成员函数来判断。
还有 string 的内容一般存储在堆上的,你能输出成功只因为内容少而被保存于内部 buffer 中而已。
|