V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wemore
V2EX  ›  C

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

  •  
  •   wemore · 2016-06-11 22:34:34 +08:00 · 1542 次点击
    这是一个创建于 3097 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先上代码:
    #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
    sfqtsh
        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 中而已。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1103 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 22:49 · PVG 06:49 · LAX 14:49 · JFK 17:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.