2016-07-15 15 views
1

どこに間違っていたかを確認するのに役立つ人はいますか?または理由を説明しますか?私は初心者であり、バイナリファイルを開くために最善を尽くしました。しかし、それは単に "ファイルが開いている" "0"が不足しています。何も出てこなかった。特定のbinファイルでC++でバイナリファイルを開いて読み込む方法は?

目的: Count3sプログラムは、32ビットの整数(int)を含むバイナリファイルを開きます。あなたのプログラムはこの数値ファイルの値3の出現回数を数えます。あなたの目的は、ファイルを開いたりアクセスしたり、制御構造に関する知識を習得することです。プログラムが使用するデータを含むファイルの名前は "threesData.bin"です。

私のコードは以下のように分かります。前もって感謝します!

ファイルから読み込む必要がありますまず第一に

buffer

int data; 

として定義され、

myfile.read (&data,sizeof(int)); 

として使用する必要があります

myfile.read (buffer,length); 

とバイナリモードで開か

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

int main() 
{ 
int count=0 ; 
ifstream myfile; 
myfile.open("threesData.bin", ios::in | ios :: binary | ios::ate); 

if (myfile) 
{ 
    cout << "file is open " << endl; 
    cout << count << endl; } 

else 
    cout << "cannot open it" << endl; 


return 0;  
} 
+3

ファイルを開くためのコードしかありません。データを読み取るコード行はありません。 –

+0

[この 'openmode'リファレンス](http://en.cppreference.com/w/cpp/io/ios_base/openmode)は、' ate'が "開かれた直後にストリームの最後を探す"と言っています。 –

答えて

1

2番目の重要なポイントはファイルから複数の数値を読み込みます - チェックストリームの条件によって制御されるループが必要です。たとえば:

myfile.open("threesData.bin", ios::binary); 
    if (myfile) 
    { 
     while (myfile.good() && !myfile.eof()) 
     { 
      // read data 
      // then check and count value 
     } 
     myfile.close(); 
     // output results 
    } 

そして、いくつかのadditinalヒント:

1)intさを

while (myfile.good() && !myfile.eof()) 
    { 
     // read data 
     // then check and count value 
    } 

そして最後に、あなたが読み終わった後、それが成功し、oppenedた、ファイルを閉じる必要があります必ずしも32ビットタイプであるとは限りません。int32_t<cstdint>から使用することを検討してください。あなたのデータが1バイト以上ある場合は、バイトオーダーが重要であるかもしれませんが、仕事の説明には記載されていません。

2)readは1回の呼び出しで複数のデータオブジェクトを読むことができます。 1つの変数の代わりに配列を読み込む

3)referencesthisなどの利用可能なリソースを読み、試してみてください。

+0

それ以上の場合は、 'unsigned char buffer [bufsiz];を使用し、必要に応じてオクテットをデコードします。 –

+0

いつものように、これを解決する方法は非常に難しい問題ではありません。 Nydiaはシンプルなものから試して、実際にはC++の高度なプログラミングに進むべきです。 – VolAnd

+0

[なぜループ状態の中のiostream :: eofが間違っていると思われますか?](http://stackoverflow.com/q/5605125/14065) 'while(myfile.read(&data、sizeof(int))){/* Read worked * /} ' –