爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4614|回复: 8

[求助] fortran中定义了一个实型数组,来读取一组包含实数与整数的数据

[复制链接]
发表于 2017-9-16 21:27:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
例如这样一串数据:-50,0.02442,0,0,0
real string(1:5)
read(20,'(5f)') string(1),string(2),string(3),string(4),string(5)
结果读取出来的数据如下:-4.9999999E-06  2.4420001E-02  0.0000000E+00  0.0000000E+00  0.0000000E+00
非0的整数就会读错,而数据又比较多,无法逐个定义读取类型,这要怎么改?
密码修改失败请联系微信:mofangbao
发表于 2017-9-17 08:27:11 | 显示全部楼层
把real string(1:5)修改成real string(5), 把read(20,'(5f)') string(1),string(2),string(3),string(4),string(5)修改成read(20,'(5f8.5)') string(1),string(2),string(3),string(4),string(5)再试试,至于为什么这么改,请好好阅读Fortran输入输出格式控制
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-9-17 10:24:34 | 显示全部楼层
风之精灵 发表于 2017-9-17 08:27
把real string(1:5)修改成real string(5), 把read(20,'(5f)') string(1),string(2),string(3),string(4),st ...

非0整数读出来还是有误
密码修改失败请联系微信:mofangbao
发表于 2017-9-17 13:25:12 | 显示全部楼层
筱筱筱筱筱雅痴 发表于 2017-9-17 10:24
非0整数读出来还是有误

具体情况截个图上来
密码修改失败请联系微信:mofangbao
发表于 2017-9-17 14:30:01 | 显示全部楼层
程序没啥大问题,real string(1:5)这么写也没问题,这样写是指定数组元素标号为1~5,但是Fortran默认就是从1开始的,所以没必要,例如如果要从零开始可以写成real string(0:4)
read(20,'(5f)') 在语法上是没问题的。那么问题在哪呢?
计算机里的数据是二进制保存的,整型和浮点数的保存规则不一样,像-50是整型,但是read(20,'(5f)') 这样计算机就会按浮点型来读取数据,因此整型的数按浮点型来读取就会出现错误了,如果是-50.0就不会出现错误。
比较直接的方法就是 read(20,*) string(1),string(2),string(3),string(4),string(5)
这样计算机会自己判断数据类型然后读取,因为这里string为浮点型,读取数据后会转化为浮点型,然后赋值给string
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-9-18 06:43:15 | 显示全部楼层
゛绍〤z、 发表于 2017-9-17 14:30
程序没啥大问题,real string(1:5)这么写也没问题,这样写是指定数组元素标号为1~5,但是Fortran默认就是从 ...

谢谢你的帮助呀{:eb511:}
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-9-18 06:43:49 | 显示全部楼层
风之精灵 发表于 2017-9-17 13:25
具体情况截个图上来

问题已经解决啦,万分感谢
密码修改失败请联系微信:mofangbao
发表于 2017-9-23 08:02:27 | 显示全部楼层
Fortran默认就是从1开始的
密码修改失败请联系微信:mofangbao
发表于 2017-9-23 17:42:25 | 显示全部楼层

谢谢楼主分享
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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