开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 860|回复: 1
收起左侧

[已解决] C移植到易读取资料丢数据,牵涉到fread函数

 关闭 [复制链接]
结帖率:100% (1/1)
发表于 2019-11-12 16:33:23 | 显示全部楼层 |阅读模式   安徽省亳州市
10精币
易语言代码
  
数据类型名公开备 注
union 
成员名类 型传址数组备 注
n整数型  
m小数型  


  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
文件字节集字节集 
文件号整数型 
numunion8
i整数型 
调试输出 (取运行目录 ())
文件号 = 打开文件 (取运行目录 ()“\s.day”, #读入, #无限制 )
调试输出 (文件号)
文件字节集 = 读入字节集 (文件号, 64)
API_CopyMemory (num, 文件字节集, 64)
计次循环首 (8, i)
调试输出 (i, num [i].n, num [i].m)
计次循环尾 ()


i支持库列表   支持库注释   
spec特殊功能支持库


C代码
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <io.h>

  5. union data
  6. {
  7.         int n;
  8.         float m;
  9. };
  10. FILE *fp;
  11. int main()
  12. {       
  13.         errno_t err;
  14.         int nLen;
  15.         int i = 0;
  16.         union data num[8];
  17.         if (err=fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\新建文件夹\\s.day","rb"))
  18.         {
  19.                 printf("error!");
  20.                         return 0;
  21.         }

  22.                 nLen = fread(num, sizeof(int), 8, fp);
  23.                
  24.                 for (i = 0; i < 8; i++)
  25.                 {

  26.                         printf("i=%d  ", i);
  27.                         printf("== %x and  %d  and %f \n", num[i].n, num[i].n, num[i].m);

  28.                 }
  29.         fclose(fp);
  30.         getchar();
  31.         return 0;

  32. }
复制代码
调试结果
C调试结果

C调试结果

C调试结果


易调试结果

易调试结果

易调试结果

可以看到易调试丢了几条数据
起初考虑可能是自定义数据类型 union n的类型引起,改为短整型,仍然不行,求大佬看看

完整的源码,和资源已打包
新建文件夹.zip (26.74 KB, 下载次数: 5)

最佳答案

查看完整内容

union是联合体,易语言不支持这种数据类型,所以你那种声明方式是错误的。 union data { int n; float m; }; 联合体的成员是共用同一块内存的,所以这个data事实上只占用一个int的内存(在32位程序上也就是4个字节) 你用易语言的自定义数据类型,两个成员占用了8个字节,问题就出在这里! ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
发表于 2019-11-12 16:33:24 | 显示全部楼层   江西省吉安市
union是联合体,易语言不支持这种数据类型,所以你那种声明方式是错误的。
union data
{
        int n;
        float m;
};
联合体的成员是共用同一块内存的,所以这个data事实上只占用一个int的内存(在32位程序上也就是4个字节)
你用易语言的自定义数据类型,两个成员占用了8个字节,问题就出在这里!


20191112190319.png

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表