C ++二进制文件 - 一遍又一遍地写入相同的数字

C++ Binary file - Same number written over and over

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

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。这是结果,因为我不善于解释:

但是它应该是 0、1、2、... 19。我哪里弄错了?

我知道了,你正在读写同一个文件;你为什么不 flush or close the stream before reading the file again. See A good explanation to buffering in streams

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;
}