我提前道歉,因为我知道这个问题已被其他用户询问并解决了。但是我似乎无法自己解决这个问题:
部分代码:
integer variable_1
open(522, position='rewind', form='unformatted')
write(522) varibale_1 //This is line 110
rewind(522)
close(522)
错误: 在文件file_name的第110行(单位= 522,文件=' fort.522') Fortran运行时错误:EOF标记后不允许顺序读取或写入,可能使用REWIND或BACKSPACE
文件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行是写声明。
提前谢谢大家。
答案 0 :(得分:1)
首先,您的问题是可重现的,它发生在(相当)当前主干和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
一切都会好的。