0

这是我的尝试

using namespace std;

int main()
{
    mt19937 mt(time(0));

    cout << mt() << endl;
    cout << "----" << endl;

    std::ofstream ofs;
    ofs.open("/path/save", ios_base::app | ifstream::binary);
    ofs << mt;
    ofs.close();

    cout << mt() << endl;
    cout << "----" << endl;

    std::ifstream ifs;
    ifs.open("/path/save", ios::in | ifstream::binary);
    ifs >> mt;
    ifs.close();

    cout << mt() << endl;

    return 0;
}

这是一个可能的输出

1442642936
----
1503923883
----
3268552048

我希望最后两个数字相同。显然,我没有写和/或读我的 mt19937。你能帮忙修复这段代码吗?

4

1 回答 1

1

当您打开文件进行写入时,您将附加到现有文件。当您重新阅读它时,您从头开始阅读。

假设您不想保留现有内容,请将 open 调用更改为

ofs.open("/path/save", ios_base::trunc | ifstream::binary);

使用trunc标志而不是app会截断现有文件,因此当您重新打开它时,您正在读取您刚刚写入的数据,而不是已经存在的旧数据。

于 2017-11-30T20:45:29.157 回答