派生结构读取数据问题
大家好!我有个关于派生结构读取数据的问题,想请教一下。现在我有一个别人写好的程序,利用派生结构读取数据,但是我在自己IVF(Windows)下调试时,IVF就卡住自动重启了,主要的代码如下:
TYPE type_rad_FY3
INTEGER :: yyyy,mn,dd,hh,mm,ss
INTEGER :: iscanline,iscanpos
REAL*4:: rlat,rlon !lat/lon in degrees for Anfovs
INTEGER :: isurf_height, isurf_type !height/type for Anfovs
REAL*4:: satzen,satazi,solzen,solazi !scan angles for Anfovs
REAL*4:: tbb(20) !bright temperatures
! REAL*4:: btemps(20)
INTEGER :: iavhrr(13),ihirsflag
INTEGER :: iprepro(5) ! values from pre-processing
REAL*4:: clfra ! Cloud cover (<1.0)
REAL*4:: ts ! Skin temperature
REAL*4:: tctop ! Cloud top temperature
END TYPE type_rad_FY3
do iscan=1,nscan
! 1.0 Read fy3 data
read(lnbufr,end=1000) rad !//此句
num_tovs_file = num_tovs_file + 1
! 2.0 Extract observation location and other required information
! QC1:judge if data is in the domain, read next record if not
!------------------------------------------------------------------------
! rlat = bfr1bhdr(bufr_lat)
! rlon = bfr1bhdr(bufr_lat)
! if (rlon < 0.0) rlon = rlon+360.0
info%lon=rad%rlon
info%lat=rad%rlat
! call da_llxy(info,loc,outsside,outside_all)
if (outside_all) cycle
ifov=rad%iscanpos
year=rad%yyyy
month=rad%mm
day=rad%dd
hour=rad%hh
minute=rad%mm
second=rad%ss
......
程序在运行到红色read语句就重启了。我查看的参考书对于派生结构的读取时rad%yyyy,但是他的程序用到了DO循环,按道理type定义应该是数组才对,利用rad(i)%yyyy来读取,我是这么理解。
所以我就不到程序的原作者为什么这么写?详细的程序在附件里(出错语句在243行)。谢谢大家!
1、vs停止工作,可能是软件本身的原因。
2、没有输入文件,别人无法调试。
3、可以看看这个 http://fcode.cn/guide-62-1.html
4、给出错误提示。
代码都通不过编译,楼主是怎么调试的? li913 发表于 2017-2-19 11:54
1、vs停止工作,可能是软件本身的原因。
2、没有输入文件,别人无法调试。
3、可以看看这个 http://fcode.c ...
谢谢你的帮助,加上sequence果然正确读取了。因为别人写的程序已经封装在模式里面了,如果要实现正确读取,是不是在生成要读取的数据程序中,设定的real和integer字节要与给定的type结构中的real和integer一致呢?同时数据存储的顺序也要与给定的type中的成员顺序一致呢?谢谢~ 百事可乐 发表于 2017-2-19 15:13
代码都通不过编译,楼主是怎么调试的?
我是调试其中主要的程序段,因为要测试自己生成的数据能否正确读入到别人给定的程序当中。 本帖最后由 li913 于 2017-2-19 17:12 编辑
好好干 发表于 2017-2-19 16:58
谢谢你的帮助,加上sequence果然正确读取了。因为别人写的程序已经封装在模式里面了,如果要实现正确读取 ...
1. 读、写 所用变量类型和字节数必须一致;2. 变量顺序不一定是结构体里的顺序,但读、写时 顺序必须一致。比如点坐标point.x, point.y和point.z, 你可以按zxy输出,同时按zxy读取。
li913 发表于 2017-2-19 17:07
这是肯定的。
谢谢你的回复!很给力~:-P 除了 sequence 之外,不同的语言(或者编译器的设置),还可能有 结构体字节对齐的问题。你应该注意一下。 fcode 发表于 2017-2-19 17:13
除了 sequence 之外,不同的语言(或者编译器的设置),还可能有 结构体字节对齐的问题。你应该注意一下。 ...
好的,谢谢~昨晚看了fcode独家教程之后,受益良多~
页:
[1]