_茶凉_ 2021-07-30 10:55 采纳率: 100%
浏览 116
已结题

用fprintf写入后用fread读取都是0 (double型)


/*    从键盘输入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

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-07-30 12:35
    关注

    你用fprintf写文件,读文件就要用fscanf读,fread在读取的时候,会出现字节序颠倒的问题,也就是说,fread在读取数据的时候,是按照低位在前,高位在后的字节顺序读取数据,而且,读取的数据是字符,然后再转成double类型。但是fprintf在写文件的时候,直接是把数字转成相应的字符了。举个简单的例子,数字53用fprintf写文件,文件中的内容就是53,但是fread在读取的时候,会把53作为一个字符(53好像是字符'5'的ascii码)读进来,这样就会出现错误

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值