如何打印二进制文件

时间:2018-06-15 15:57:18

标签: c++ file

我想创建一个二进制文件,其中包含从0到10的整数。在那之后,我想把它们的每一个加倍并打印出来。当我运行它时,没有任何东西被打印出来。

using namespace std;

int main()
{
    fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary);
    for(int i=0; i<=10; i++)
        binfile.write((char*)&i, sizeof(i));
    binfile.flush();
    int number;
    while(binfile.read((char*)&number, sizeof(number)))
    {
        number*=2;
        binfile.seekp(binfile.tellg()-sizeof(number));
        binfile.write((char*)&number, sizeof(number));
        binfile.flush();
    }
    binfile.seekg(0);
    while(binfile.read((char*)&number, sizeof(number)))
        cout<<number;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您的while条件永远不会得到满足。您的第一次(也是唯一一次)读取尝试返回0 - 这就是为什么没有打印的原因。

答案 1 :(得分:0)

在第一个循环之后,你必须寻找&#34;得到&#34;指向第0个位置的指针,用于覆盖后续&#34;中的数字;而#34;循环
第二个循环终止,因为binfile的eofbit被设置,所有以下输入 - 输出操作都将失效,所以我们必须清除eofbit以重新启动操作

工作代码:

#include <fstream>
#include <iostream>        

using namespace std;

int main()
{
    fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary);
    for(int i=0; i<=10; i++) // 1st loop
        binfile.write((char*)&i, sizeof(i));
    binfile.flush();
    binfile.seekg(0);
    int number;
    while(binfile.read((char*)&number, sizeof(number))) // 2nd loop
    {
        number*=2;
        binfile.seekp(binfile.tellg()-sizeof(number));
        binfile.write((char*)&number, sizeof(number));
        binfile.flush();
    }
    binfile.clear();
    binfile.seekg(0);
    while(binfile.read((char*)&number, sizeof(number))) // 3rd loop
        cout<<number << " ";
    return 0;
}
相关问题