/* 从键盘输入10个double型,将其写入文件,然后用fread读取输出至数组。
*/
#include<stdio.h>
int main()
{
FILE *fp;
double no;
int i=0;
if( (fp=fopen("数组double.bin","wb"))==NULL )
printf("打开文件失败。\n");
else
{
puts("输入10个double:");
while( i<10 )
{
printf("输入第%d个数:",i+1);
scanf("%lf",&no);
fprintf(fp,"%lf\n",no);
i++;
}
fclose(fp);
}
//下面 进行读取。
double zu[10];
if( (fp=fopen("数组double.bin","rb"))==NULL )
printf("打开文件失败。\n");
else
{
fread(zu,sizeof(double),10,fp) ;//读取结束,下面显示。
for(i=0;i<10;i++)
printf("zu[%d]:%lf\n",i+1,zu[i]);
fclose(fp);
}
return 0;
}
下面是输出结果:
输入10个double:
输入第1个数:123.1
输入第2个数:123.2
输入第3个数:123.3
输入第4个数:123.4
输入第5个数:123.5
输入第6个数:456.77
输入第7个数:456.888
输入第8个数:99.100
输入第9个数:60.111
输入第10个数:100.112
zu[1]:0.000000
zu[2]:0.000000
zu[3]:0.000000
zu[4]:0.000000
zu[5]:0.000000
zu[6]:0.000000
zu[7]:0.000000
zu[8]:0.000000
zu[9]:0.000000
zu[10]:0.000000
你用fprintf写文件,读文件就要用fscanf读,fread在读取的时候,会出现字节序颠倒的问题,也就是说,fread在读取数据的时候,是按照低位在前,高位在后的字节顺序读取数据,而且,读取的数据是字符,然后再转成double类型。但是fprintf在写文件的时候,直接是把数字转成相应的字符了。举个简单的例子,数字53用fprintf写文件,文件中的内容就是53,但是fread在读取的时候,会把53作为一个字符(53好像是字符'5'的ascii码)读进来,这样就会出现错误
我自己猜测,是因为 fread(zu,sizeof(double),10,fp) 读取的要是数组吗,而输入文件的是10个double型,不算是数组。 返回值都检查过了,应该没有问题。