2009-05-26 7 views
0

私はこのプログラムの作成:整数「n」は.binのファイルに「test.bin」を書くことになっていますそのなぜこのプログラムは.binファイルから正しく読み込みませんか? (C++)

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    fstream file; 
    file.open("test.bin", ios::in | ios::out | ios::binary); 
    if(!file.is_open()) 
    { 
     return -1; 
    } 
    int n = 5; 
    int x; 
    file.write(reinterpret_cast<char*>(&n), sizeof(n)); 
    file.read(reinterpret_cast<char*>(&x), sizeof(x)); 
    std::cout<<x; 
    file.close(); 
    std::cin.ignore(); 
    return 0; 
} 

を、そして「整数に「test.bin」からデータを読み込みますx "を表示し、" x "を画面に表示します。

プログラムを実行すると、5ではなく-842150451が表示されます。なぜこのようなことが起こりますか、どのように修正できますか?

+0

デュープ908555 –

+0

ノープ - 908555のダンプではありません。データの読み込みは含まれません。 –

答えて

7

書き込み時にfile.write()が現在のファイルポインタを移動していないため、書き込まれたデータの最初の場所からデータを読み取ることができません。

1

書き込んだデータを読み込むために書き込みを行った後、ファイルストリームの先頭をファイルの位置に変更する必要があります。

また、書き込みが期待したすべての書き込みと、実際に読み取られたかどうかを確認する必要があります。半乱数は、読み込みに失敗したためです。

2

file.seekg(0);を読み取りコマンドと書き込みコマンドの間に挿入します。

1

私はJhericoに同意します。

file.seekg (0, ios::beg); 
+0

いいえ、ios :: begが必要です(see kg is overloaded) –

関連する問題