c ++,为什么我的数组是空的?

时间:2014-02-08 20:58:25

标签: c++ fstream ifstream

我是c ++的新手,所以这可能会非常明显。

在我的程序中,我正在创建一个数组,将其写入二进制文件,然后将其读入另一个数组并打印它。

我似乎无法从二进制文件读取到新数组。当我尝试打印出新阵列时,很明显它是空的。你能帮我看看我做错了吗?

int main(){
    int N;
    std::cin >> N;
    int* array = new int[N*N];

    for(int row = 0; row < N; row++){
        for(int column = 0; column < N; column++){
            array[row*N + column] = (row + column)%10;
            cout << array[row*N + column];
        }
        cout << "\n";
    }

    //----------------------------------------------------

    ofstream out("array.txt", ios::out | ios::binary);
    out.write((char*)array,N*N*sizeof(int));

    //------------------------------------------------------

    int* altArray = new int[N*N];
    ifstream in;
    in.open("array.txt", ios::in | ios::binary);

    in.read((char*)altArray, N*N*sizeof(int));

    //-----------------------------------------------------

    cout << "From Binary File\n";

    for(int row = 0; row < N; row++){
        for(int column = 0; column < N; column++){
            cout << altArray[row*N + column];
        }
        cout << "\n";
    }

    //----------------------------------------------------

    delete []array;
    delete []altArray;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

根据N的大小,数组内容可能仍在输出缓冲区中而不会刷新。您必须将缓冲区刷新到磁盘或关闭文件,例如

out.close();

然后,当你再次回读时,你会看到数组的内容。

答案 1 :(得分:1)

out.write((char*)array, N*N*sizeof(int));
// ...
in.read((char*)altArray, N*N*sizeof(int));

文件流通过缓冲来维护其数据。在将数据读入程序之前,输出序列显然没有从缓冲区中刷新。您需要先刷新输出流:

out << std::flush;

如果不再需要文件流,也可以通过关闭文件来完成。

另一种选择是你可以将tie()个流放在一起,这样无论何时执行读取都会同步输入序列:

in.tie(&out);