关于 EOF 标记的 Fortran 错误
Fortran error about EOF marker
我提前道歉,因为我知道这个问题已经被其他用户问过并且已经解决了。但是我自己似乎无法解决:
部分代码:
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) 或 rewind(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
一切都会好起来的。
我提前道歉,因为我知道这个问题已经被其他用户问过并且已经解决了。但是我自己似乎无法解决:
部分代码:
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) 或 rewind(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
一切都会好起来的。