爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6985|回复: 10

[求助] fortran运行程序时终止的问题??

[复制链接]

新浪微博达人勋

发表于 2014-4-30 22:53:33 | 显示全部楼层 |阅读模式

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

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

x
问题1:Fortran运行某数据读写程序时,总是出现终止并提示”end-of-file during read,unit 2,......文件地址。。。。”我尝试把读取的数据输出到屏幕是可以的。。


问题2:同样是运行另外一个批处理文件读写程序时,打开第一个文件并可以成功生成一个文件,但是到读取完第二个文件时程序终止,并提示“Program Exception:array bounds exceeded" 可是我编译时用的是动态数组,存储空间是随文件大小可变的,怎么会超出呢?

求问各路大神如何解决
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-4-30 23:49:29 | 显示全部楼层
第一个问题是,你的文件数据小于你读取的数量;
第二个问题是,你循环执行的次数大于你数组定义的大小。

评分

参与人数 1金钱 +6 收起 理由
lqouc + 6 就是这样

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-1 09:33:53 | 显示全部楼层
言深深 发表于 2014-4-30 23:49
第一个问题是,你的文件数据小于你读取的数量;
第二个问题是,你循环执行的次数大于你数组定义的大小。

是哎,我最近上课需要用fortran编程,批量处理的时候也会出现这样的提示,不过仔细看看,还是可以找出错误的~嘿嘿,和你说的一样的。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-1 10:37:50 | 显示全部楼层
言深深 发表于 2014-4-30 23:49
第一个问题是,你的文件数据小于你读取的数量;
第二个问题是,你循环执行的次数大于你数组定义的大小。

谢谢深深,我研究一下。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-1 14:36:10 | 显示全部楼层
xsjvn_ 发表于 2014-5-1 10:37
谢谢深深,我研究一下。。

你好,再请问你:
我有600个文件,用循环打开,并且每次先空读获取文件内部资料的行数,再去分配动态数组的空间,循环的次数也是获取的N,怎么每次都是只能运行两个文件就终止了呢?我试着从第三个文件开始也是运行两次就结束了。。付部分程序如下:
do h=1,600
open(2,file='g:\fdata\swdata\'//fname(h))                  
n=0
  do while(.true.)
  read(2,*,end=100)
  n=n+1
  enddo
100 close(2)
print*, n
pause
allocate(st(n))
allocate(lat(n))
allocate(lon(n))
allocate(hh(n))
allocate(yr(n))
allocate(mon(n))
allocate(dy(n))
allocate(sun(n))
allocate(qq(n))
  open(2,file='g:\fdata\swdata\'//fname(h))
  do i=1,n
  read(2,*)st(i),lat(i),lon(i),hh(i),yr(i),mon(i),dy(i),sun(i),qq(i)
  print*,st(i),lat(i),lon(i),hh(i),yr(i),mon(i),dy(i),sun(i),qq(i)
  
  end do
  close(2)
  open(3,file='g:\fdata\avedata\'//fname(h))
  print*, n
  pause

。。。下面是写入文件的程序(略了)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-5-1 15:51:58 | 显示全部楼层
xsjvn_ 发表于 2014-5-1 14:36
你好,再请问你:
我有600个文件,用循环打开,并且每次先空读获取文件内部资料的行数,再去分配动态数 ...

没看出来哪里的问题。你debug一下···操作是,build---debug---go程序将自动定位到出错行···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-1 21:35:45 | 显示全部楼层
言深深 发表于 2014-5-1 15:51
没看出来哪里的问题。你debug一下···操作是,build---debug---go程序将自动定位到出错行···

问题已经解决,非常感谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-19 20:25:07 | 显示全部楼层
没看懂,最后怎么解决的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-3 16:37:34 | 显示全部楼层
言深深 发表于 2014-5-1 15:51
没看出来哪里的问题。你debug一下···操作是,build---debug---go程序将自动定位到出错行···

你好,想请问下,这是什么原因呢
do while(.true.)
read(2,*,iostat=status)
s=s+1
if(status/=0) exit
enddo
s=s-1
比如我文件100行,用上面的程序读出的行数居然>100行,导致后面出问题 end of file
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2016-3-3 21:35:02 | 显示全部楼层
guotingsaijin 发表于 2016-3-3 16:37
你好,想请问下,这是什么原因呢
do while(.true.)
read(2,*,iostat=status)

s初值是多少?
也可以用如下程序
n=0
        do while (.true.)
        read(10,*,end=100) line
        n=n+1
        enddo
        100 continue
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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