2014-02-08 31 views
-1

我是新來的C++,所以這可能會非常明顯。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

**你怎麼**注意到_'empty'_?我不明白你在問什麼? –

+0

@JoachimIsaksson修復它,謝謝! – user2726232

回答

1

取決於N大小,數組的內容可能仍處於傳至輸出緩衝器,而不是刷新。您必須將緩衝區刷新到磁盤或關閉文件,例如

out.close(); 

然後,您應該在再次讀回時看到數組的內容。

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

文件流通過緩衝來保持其數據。在數據讀入程序之前,輸出順序顯然沒有從緩衝區中清除。您需要先刷新輸出流:

out << std::flush; 

這也可以通過關閉該文件,如果不再需要文件流做..

另一種選擇是,你可以tie()流在一起,輸入序列在執行讀取時同步:

in.tie(&out);