2011-01-13 8 views
2

浮動小数点値の配列をファイルに書き込み、それを読み返そうとしています。
私は配列から直接書き込むことを試みましたが、それを読み返す際には、長さが153より大きい配列の問題が続いています。このコード例では、各フロート値を1つずつ書き出しています。彼らが持っている153以上のインデックスを持つ値の場合浮動小数点配列をバイナリファイルに保存する際の問題と読み返し(C++)

彼らは153.0、154.0、155.0、...

あるべき値153.0は、なぜ私のためではない、このコードは動作しますか?

int length = 160; 

    char* fileName = "testFile.dat"; 

    // Write data to file 

    FILE* file = fopen (fileName, "w"); 

    for(int i = 0; i< length; i++){ 
    // We are just storing the indices, so value at i is equal to i 
    float f = (float) i; 
    fwrite(&f, sizeof(float), 1, file); 
    } 

    fclose(file); 

    // Read data from file into results array 

    file = fopen(fileName, "r"); 

    float* results = new float[length]; 

    for(int i = 0; i< length; i++){ 
    float f; 
    fread(&f, sizeof(float), 1, file); 
    results[i] = f; 
    } 

    fclose(file); 

    // Now check data in results array 

    bool fail = false; 

    for(int i = 0; i< length; i++){ 
    if(results[i]!=(float)i){ 
     fail = true; // This should not be hit, but it is! 
    } 
    } 

    delete [] results; 

おかげで、 デイブ

+2

は、ここで見られるように何もC++はありません。これはすべてCです。それらを混同しないでください。これをC++の質問として投稿すると、 'vector'と' iostream'の使い方についてのコメントが得られます。 –

+1

バイナリファイルへの書き込みと読み取りを指定する必要があります。このリンクをチェックしてください:http://www.cplusplus.com/reference/clibrary/cstdio/fopen/そうしないとfreadはEOF文字に当たったときに読書を止めます。いくつかのランダムな浮きを書く。 – LavaScornedOven

+0

@Space_COwbOy最後に 'delete [] results;'行はどうですか? :-) – Pointy

答えて

3
FILE* file = fopen (fileName, "wb"); 
FILE* file = fopen (fileName, "rb"); 
+0

華麗な - ありがとう! –

関連する問題