二进制文件数组元素的平均值

The mean value of the binary file array elements

我需要编写函数将数组元素写入二进制文件,然后求二进制文件元素的平均值。

#include <stdio.h>
double enterArray(){
    int i=0,n;
    double a[101];
    FILE* fp=fopen("niz.bin", "w");
    while(1){
        scanf("%lf", &a[i]);
        if(a[i]==-1)break;
        i++;
        if(i==100)break;
    }
    n=i;
    for (i=0; i<n; i++)
   fwrite(a,4, n, fp);
    fclose(fp);
  return 0;   
}
double meanValue(){
  return 1;
}
int main() {
    enterArray();
    printf("%g\n", meanValue());
    return 0;
}

我在 niz.bin 文件中得到了一些随机字符。你能帮我修复我的代码吗?

代码有一些问题。

你取任意数量的doubles,然后将数组中的前n * 4个字节“重复”写入文件。

  • 您不确定 sizeof (double) 是否等于 4 个字节。
  • 在每次迭代中,您将数组 a 中的 (n * 4) 个字节写入文件。
    • 你想要的是,从 i * sizeof (double) 开始,将 sizeof (double) 字节写入文件(如果你想使用循环。你可以简单地写入(n * sizeof (double) 字节到文件)
  • 您在 fopen 中使用 "w" 模式,这是 而不是 “写入二进制”模式。请改用 "wb"

然后,在meanValue(),你什么都不做。 Writing/reading 一个 10 元素 double 数组 to/from 二进制文件可以通过以下方式完成:

    /* write to the file */
    double write_arr[10] = { 0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9 };
    FILE *fp = fopen("niz.bin", "wb");
    fwrite(&write_arr, sizeof(double), 10, fp);
    fclose(fp);

    /* read from the file */
    fp = fopen("niz.bin", "rb");
    double read_arr[10];
    fread(&read_arr, sizeof (double), 10, fp);

另外,请注意,您必须确定要写入文件的元素数量,因为您在不知道要写入多少字节的情况下将字节写入文件。由于您不立即写入元素,因此可以序列化文件前 4 个字节中的元素数。当您从中读取时,读取前 4 个字节以了解前面有多少 double