更新:誰かがこれを読んでいて、同様の問題がある場合は、doubleをintに変換した場所が問題だったようです。例54が54.000として保存されていると思ったところでは、実際には53.99999として保存されました...そしてintに変更すると53になりました。 この問題の回避策は0.5を追加することですファイルの配列にファイルを書くことができません(C++)
int output_buffer=O[m][n];
たコードは、私が "O" と呼ばれるダブルスの二次元アレイを有する
int output_buffer=O[m][n]+0.5;
なります。
double O[3][3];
この2つの機能をこの順番で使用します。
...
displaymatrixO();
writedecrypted();
...
場合
そして
プログラムが実行されるFILE *opFile;
opFile=fopen ("decrypted.txt","wb");
...
は、最初の関数(displaymatrixOが)の画面にマトリックスOを出力
int writedecrypted()
{ for (int n=0;n<3;n++)
for (int m=0;m<3;m++)
{
int output_buffer=O[m][n];
fputc (output_buffer,opFile);
}
}
このファッション:
O is:
49 50 51
52 53 54
3 3 3
これは正しいものです。これはOが想定しているものです。
2番目の関数は、各値が8ビット/ 1バイトのスペースを占めるファイルに行列の個々の値を型キャストして書き込むことになっています。私は、バイナリエディタを使用して、ファイルを見ると、これは、ファイルが(16進数で)次のようになります。8ビット符号付き整数形式で
0x31 0x32 0x33 0x33 0x35 0x35 0x03 0x03 0x03
(すなわちOがdisplaymatrixOを使用して表示されているか)、これは、以下のようにそれが見えるもの:Oをコピーしているようだ
49 50 51 51 53 53 3 3 3
49 50 51
51 53 53
3 3 3
すなわちO上に[1] [1] O [1]と[0] O上に[0] [2] [ 2] [1]。私はコードを何度も見てきたので、どこが間違っているのか分からないようです。できれば...助けて
初期化を試すことができます int output_buffer = O [m] [n]; int output_buffer = 0を先に使用しますか?あなたのコードで、メモリが再利用されている場所であると私が見る唯一の場所です。 –
ようこそStackOverflowへ!あなたが投稿したコードには何も問題はありません([this program](http://ideone.com/6IwdF)が示しているように)。問題は**あなたが**投稿していないコードにある必要があります。あなたが見ているエラーを示す最短** complete **プログラムを投稿してください。 (このデバッグ手法の詳細については、http://sscce.org/を参照してください)。 –
そして、将来の参照のために:Robは「テストケース」と呼ばれるものを説明しました。 – Griwes