Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 90运行时错误:文件结束_Fortran_Runtime Error_Fortran90 - Fatal编程技术网

Fortran 90运行时错误:文件结束

Fortran 90运行时错误:文件结束,fortran,runtime-error,fortran90,Fortran,Runtime Error,Fortran90,如果以前有人问过这个问题,我很抱歉,但我找不到一个似乎对我有用的答案。我正在使用一个旧程序,但对它做了一些修改 我可以包括整个2500行程序,但这似乎是很多 我已经成功地编译了a程序,但当我尝试运行它时失败了。我在读取.dat文件的行中得到一个“Fortran运行时错误:文件结束”。我尝试编译一个测试段,使用相同的.dat文件和相同的变量。这导致了同样的问题 PROGRAM OPEN INTEGER (KIND=1), PARAMETER :: dy=3 ! number of income s

如果以前有人问过这个问题,我很抱歉,但我找不到一个似乎对我有用的答案。我正在使用一个旧程序,但对它做了一些修改

我可以包括整个2500行程序,但这似乎是很多

我已经成功地编译了a程序,但当我尝试运行它时失败了。我在读取.dat文件的行中得到一个“Fortran运行时错误:文件结束”。我尝试编译一个测试段,使用相同的.dat文件和相同的变量。这导致了同样的问题

PROGRAM OPEN
INTEGER (KIND=1), PARAMETER :: dy=3 ! number of income states 
INTEGER (KIND=2) :: OpenStatus
REAL, DIMENSION(dy) :: grid,wt
OPEN(1,file='cygdrive/user/mk.dat',status='old',form='formatted',IOSTAT=OpenStatus)

READ (1,*) grid, wt
IF(OpenStatus>0) STOP 'cannot open mk.dat'
CLOSE(1)

PRINT*, grid(1)
END PROGRAM
引用的数据文件是:

-1.7320508e+000

0.0000000 E+000

1.7320508e+000

4.1777138e-001

1.6710855e+000

4.1777138e-001

这些数字中的每一个都在自己的线上,前面有一个空格

这将生成相同的文件结束运行时错误。我真的很感激这里的任何帮助

我应该补充一点,我是用gfortran编译的

编辑:

根据下面HighPerformanceMark的建议,我对其进行了修改,以包含一个inquire测试

PROGRAM TEST
CHARACTER :: fnm, seq, fort
Logical :: lex
INTEGER (KIND=1), PARAMETER :: dy=3 ! number of income states 
INTEGER (KIND=2) :: j,j0,j1,j2,j4,j5,j6,j7,k,jjj,jj,dyy,OpenStatus
REAL, DIMENSION(dy) :: grid,wt
OPEN(1,file='cygdrive/user/mk.dat',status='old',form='formatted',IOSTAT=OpenStatus)
INQUIRE (1, EXIST=lex, NAME=fnm, SEQUENTIAL=seq, FORMATTED=fort)
PRINT*, 'Exists=',lex, ' Name=',fnm, ' Sequential=', seq, 'Formatted=', fort
READ (1,*) grid, wt
IF(OpenStatus>0) STOP 'cannot open mk.dat'
CLOSE(1)
PRINT*, grid(1)
END PROGRAM
inquire语句的结果是: Exists=T Name=Sequential=U格式化=U

我的理解是,文件被找到(即exists作为true返回)、未命名,并且格式和顺序访问返回为unknown(正如我稍后介绍的direct)。我还检查了分隔符和填充符,它们作为未知返回

我的初学者直觉告诉我,我应该尝试用fortran程序编写一个新的数据文件,这样就可以解决问题了?对吗?如果是,这里是否存在根本性的误解,即这是来自其他来源的数据文件的问题

感谢您的耐心。

(在评论中回答。请参阅)

OP写道:

我已经解决了这个问题,程序在另一个地方寻找它,我现在已经纠正了这个问题


什么意思是在第251行出现运行时错误(不要告诉我们哪一行是第251行,弄清楚这一点要有趣得多)调用.dat文件?。如果您指的是
open
语句,请立即测试
iostat
是否成功。现在,您的代码将忽略错误代码,并继续尝试读取两个值,然后测试错误代码。你确定文件在程序查找的地方吗?如果您确定,请使用
inquire
语句收集确认信息。您好,很抱歉原始帖子不够清晰。我希望我现在已经修好了。实际上是read语句导致了错误。我已将调查声明的结果合并到原始帖子中。如果你能透露一些情况,我将不胜感激。Cheers打开状态检查应放在打开语句之后。你现在的询问毫无用处!使用基于文件名而不是单元号的查询。如果是在单元号上,则必须在检查之后。现在,您从查询中打印的数据似乎只是垃圾。现在投票结束这个问题,OP的评论表明程序没有错误。这个问题在这里没有持久的价值。