C ++二进制文件 - 反复写入相同的数字

时间:2016-06-19 19:14:17

标签: c++ binaryfiles

所以我有这个代码,非常简单:

struct Item{
int x;
};


int main(){

    ofstream dat("file.bin", ios::binary);

    Item chair;

    for (int i = 0; i < 20; i++) {
           chair.x = i;
           dat.write((char*)&chair, sizeof(Item));
    }


ifstream dat2("file.bin", ios::binary);

for (int i = 0; i < 20; i++) {
    dat2.read((char*)&chair, sizeof(Item));
    cout << chair.x << endl;
}


return 0; }

当我运行这段代码时,即使我总是将chair.x设置为i的值,当我读取第二个for循环中的条目时,读取的每个.x值都是19.这是结果,因为我不好解释:

Code result 但它应该是0,1,2,...... 19.我在哪里弄错了?

1 个答案:

答案 0 :(得分:2)

我明白了,你正在读写同一个文件;为什么在再次阅读文件之前,请不要{9}}或flush。见close

int main(){

    ofstream dat("file.bin", ios::binary);

    Item chair;

    for (int i = 0; i < 20; i++) {
           chair.x = i;
           dat.write((char*)&chair, sizeof(Item));
    }
    dat.flush();      //Add this here
    //dat.close();    //or this


    ifstream dat2("file.bin", ios::binary);

    for (int i = 0; i < 20; i++) {
        dat2.read((char*)&chair, sizeof(Item));
        cout << chair.x << endl;
    }


return 0;
}