我不明白为什么我的Fortran90程序不再写入文件。几个小时前它还能用。我没有修改这部分代码,也没有引入一些它不应该写入文件的条件。在下一行,我放了一个print命令,它在终端上写入应该写入文件的相同值,这是有效的。
open(500, file='data.dat')
write(500,fmt='(E14.4,E14.4)') A,B !this SHOULD be printed on unit 500
write(*, fmt='(E14.4,E14.4)') A,B ! this is printed on terminal我试过改变单位,但什么也改变不了。我尝试用新名称打开一个新文件,并在代码的其他部分写入,甚至在变量声明之后的开始也是如此。这似乎也不起作用。这太令人沮丧了,因为以前一切都很正常。会发生什么呢?
发布于 2016-12-31 22:35:07
在Linux和以下程序中使用gfortran 5.3 (即复制粘贴的代码和最小的样板文件)。
program hop
implicit none
double precision :: A, B
A = 1
B = 2
open(500, file='data.dat')
write(500,fmt='(E14.4,E14.4)') A,B !this SHOULD be printed on unit 500
write(*, fmt='(E14.4,E14.4)') A,B ! this is printed on terminal
end program hop在终端中输出0.1000E+01 0.2000E+01,在文件data.dat中输出完全相同的内容。
程序中的写指令是挂起的吗?看不到输出可能与i/o缓冲有关。
如果添加这行代码,行为是否会发生变化
flush(500)在写指令之后?
发布于 2016-12-31 23:03:56
我必须在一个周期中写入文件。现在,我打开循环中添加了position='append‘的文件,并在循环结束时关闭它。就像
program pro
implicit none
integer (kind=2) :: i, A, B
do i=1,10
A=i
b=i+1
open(500, file='file.dat', position='append')
write(500, *) A, B
close(500)
enddo现在,这似乎起作用了。
https://stackoverflow.com/questions/41404004
复制相似问题