争论二进制文件

时间:2018-06-15 17:51:57

标签: c++ file

考虑我有以下代码:

int main()
{
    ofstream output("Brojevi.dat");
    for(int i=0; i<=10; i++)
        output.write((char*)&i, sizeof(i));
    output.flush();
    ifstream input("Brojevi.dat");
    int broj;
    while(input.read((char*)&broj, sizeof(broj)))
        cout<<broj<<endl;
    input.seekg(0, ios::beg);
    while(input.read((char*)&broj, sizeof(broj)))
        cout<<broj<<endl;
}

当我运行此程序时,输出只是0到10之间的数字。我想知道为什么他们打印两次,因为我有两个相同的while循环。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

首先以二进制模式打开outputinput

ofstream output("Brojevi.dat",ios::binary);
ifstream input("Brojevi.dat",ios::binary);

int broj;
while(input.read((char*)&broj, sizeof(broj)))
cout<<broj<<endl;

添加input.clear() 因为在上面的循环中你已经达到eof(),之后,所有的输入输出操作都将失效,所以你必须清除内部的eof位才能继续你的操作 工作代码:

#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    ofstream output("Brojevi.dat",ios::binary);
    for(int i=0; i<=10; i++)
        output.write((char*)&i, sizeof(i));
    output.flush();
    ifstream input("Brojevi.dat",ios::binary);
    int broj;
    while(input.read((char*)&broj, sizeof(broj)))
        cout<<broj<<endl;
    input.clear();
    input.seekg(0, ios::beg);
    while(input.read((char*)&broj, sizeof(broj)))
        cout<<broj<<endl;
}