二进制文件数组元素的平均值
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 文件中得到了一些随机字符。你能帮我修复我的代码吗?
代码有一些问题。
你取任意数量的double
s,然后将数组中的前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
。
我需要编写函数将数组元素写入二进制文件,然后求二进制文件元素的平均值。
#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 文件中得到了一些随机字符。你能帮我修复我的代码吗?
代码有一些问题。
你取任意数量的double
s,然后将数组中的前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
。