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

用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 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路