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

Writing array to file code does not work (C++)

本文关键字:不起作用 C++ 代码 文件 数组      更新时间:2023-10-16

更新:如果有人读到这篇文章并遇到类似的问题,问题似乎是我将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]上。我看了一遍又一遍的代码,似乎不知道哪里出了问题!如果可以,请提供帮助。。。

看起来您将数据存储为double,并在执行此强制转换时向下取整:

int output_buffer=O[m][n];

使您的原始数组声明int,并查看问题是否消失。

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