关于EOF标记的Fortran错误
我提前道歉,因为我知道这个问题已经被其他用户提出并解决了。但我自己似乎无法解决这个问题: 代码部分:关于EOF标记的Fortran错误,fortran,eof,Fortran,Eof,我提前道歉,因为我知道这个问题已经被其他用户提出并解决了。但我自己似乎无法解决这个问题: 代码部分: integer variable_1 open(522, position='rewind', form='unformatted') write(522) varibale_1 //This is line 110 rewind(522) close(522) 错误: 在文件名的第110行(单位=522,文件=fort.522) Fortran运行时错误:EOF标记后不允
integer variable_1
open(522, position='rewind', form='unformatted')
write(522) varibale_1 //This is line 110
rewind(522)
close(522)
错误:
在文件名的第110行(单位=522,文件=fort.522)
Fortran运行时错误:EOF标记后不允许顺序读取或写入,可能使用倒带或退格
文件522由另一个子例程以以下方式创建:
variable_1 = 0
inquire(522, exist=lex, iostat=ios, recl=i)
open(522,iostat=ios, form='unformatted')
read(522, err=37, end=37) variable_1
close(522)
go to 38
37 continue
38 continue
我不知道该怎么办,我试着把bakcspace(522)或倒带(522)放在不同的地方,结果出现了分割错误或是同样的错误
注意:第110行是write语句
提前感谢大家。首先,您的问题是可重复的,它发生在(而不是)当前主干和gfortran 4.8上 您在第二个代码段中所做的是创建一个完全空的文件。我不确定这是否是本意,但事情就是这样发生的 接下来发生的是文件在读取错误时未关闭。下一个open语句几乎什么都不做,允许在现有单元上执行多个open语句。之后,当您尝试对具有错误条件的文件执行I/O时,欢闹随之发生 所以把你的代码改成
logical lex
variable_1 = 0
inquire(552, exist=lex, iostat=ios, recl=i)
open(552,iostat=ios, form='unformatted')
read(552, err=37, end=37) variable_1
go to 38
37 continue
38 continue
close(552)
open(522, file="fort.552", form='unformatted')
write(522) variable_1
rewind(522)
close(522)
end program
一切都会好起来的
我已经就这两个方面进行了存档和分析。请参阅附加信息。谢谢,我没有遗漏任何内容,这确实是代码的唯一部分。这种用法可以很好地与不同的编译器配合使用,现在我们不得不使用gcc。这就是问题所在。那是一个打字错误,一切都应该是522单元。我继承了这段代码,我一直在努力修复它。。。感谢您提供的任何帮助:)+1以确定问题,但这里仍然存在许多问题。使用
iostat
格式不好,不必检查结果。同样地,inquire
结果也没有被使用,为什么不使用lex
跳过尝试打开?在未格式化的文件上查询recl
有什么意义?关闭前,没有必要倒带。就这一点而言,在结束程序之前关闭没有意义。将未命名文件命名为“fort.nn”的约定不是标准的,因此要么同时命名,要么两者都不命名。亲爱的tkoenig,不幸的是,这会导致分段错误…我可以尝试其他选项吗?如果运行我发布的确切代码,是否会出现分段错误?我还没有尝试过,我把它放在我的代码中,它给了我分段错误。我会遵照你的建议,在几分钟内向你汇报最新情况。谢谢你的帮助!我只尝试了你的代码,它很好,我用gfortran编译了它,它按预期创建了一个文件fort.522…我该从这里走到哪里?