将数组写入文件代码不起作用(C ++)

时间:2012-03-13 20:02:46

标签: c++ arrays file casting writing

更新:如果有人正在阅读此问题并遇到类似问题,那么问题似乎就是我将double转换为int的问题。我认为例如54被存储为54.000 ...,它实际存储为53.99999 ...当更改为int时,它变为53。 我发现这个问题的解决方法是简单地添加0.5,以及

的代码
int output_buffer=O[m][n];

int output_buffer=O[m][n]+0.5;

我有一个名为“O”的二维二进制数组。哪里

double O[3][3];

我按照这个确切的顺序依次使用这两个函数;

...
displaymatrixO();
writedecrypted();
...

哪里

int displaymatrixO() 
{   cout << "O is:" << "\n";
    for (int n=0;n<3;n++)
    for (int m=0;m<3;m++)
    {
      cout << O[m][n];
      if (m == 2) cout << "\n";
      else cout << " ";
    }

}

并且

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);
    }
}

其中

FILE *opFile;
opFile=fopen ("decrypted.txt","wb");
...

当程序运行时,第一个函数(displaymatrixO)以这种方式将矩阵O输出到屏幕:

O is:
49 50 51
52 53 54
3 3 3

哪个是正确的,这就是O应该是的。

然后第二个函数应该进行类型转换并将矩阵的各个值写入一个文件,其中每个值占用8位/ 1字节的空间。当我使用十六进制编辑器查看文件时,这就是文件的样子(十六进制):

0x31 0x32 0x33 0x33 0x35 0x35 0x03 0x03 0x03

以8位有符号整数格式(即如何使用displaymatrixO显示O),这就是它的样子:

49 50 51 51 53 53 3 3 3 

即。

49 50 51
51 53 53
3 3 3 

似乎将O [2] [0]复制到O [0] [1]和O [1] [1]到O [2] [1]。我一遍又一遍地看着代码,我似乎无法弄清楚我哪里出错了!如果你能帮助......

1 个答案:

答案 0 :(得分:0)

看起来您将数据存储为 double ,并在执行此操作时向下舍入:

int output_buffer=O[m][n];

制作原始数组声明 int ,看看问题是否消失。

编辑:以下是有关该主题的更多信息。 www.parashift.com