我正在编写我的代码并在Fortran中使用输入和输出功能.代码看起来像这样(仅用于简化):
PROGRAM TEST
REAL, DIMENSION(1000):: A
REAL:: B
INTEGER::T
!Defining input and output
OPEN(UNIT=1, FILE='input.dat', STATUS='OLD')
OPEN(UNIT=2, FILE='output.dat', STATUS='NEW')
!Reading from file "input.dat"
READ(1,*) (A(I),I=1,1000)
!Just for initial condition
B=0.0
DO T=1, 10
PRINT *, 'Step =', T
DO I=1, 1000
B=B+1.0
A(I)=A(I)/B
END DO
END DO
!Writing results into file "output.dat"
DO I=1, 1000
WRITE (2,100) I, A(I)
END DO
100 FORMAT (' ',T3, I12, T17, F14.4)
END PROGRAM TEST
Run Code Online (Sandbox Code Playgroud)
我正在使用Gfortran 5.3,结果不像我期待的那样.我有望获得变量的结果T的画面(或终端在Ubuntu OS)上时该程序正在运行,并且变量I和A(I)被写入到文件中output.dat.我没有与变量的问题I和A(I),因为他们成功地写入文件output.dat.问题在于变量T,它没有出现在终端上,而是写入文件中input.dat.好吧,即使文件中的上一个文件input.dat也没有被覆盖.有人能给我这个建议吗?
仅供参考,我也试过其他编译器(使用Windows操作系统),例如:
这可能是因为您使用平台/编译器/编译器版本/编译器选项的特定组合,单元1是控制台的预连接单元.
您的OPEN语句将该单元指向您的输入文件.因此,隐式地处理该单元的PRINT语句然后将它们的输出定向到同一文件.
使用不同的单元号 - 从编译器预连接的单元中选择大于10的值通常是安全的.为了进一步安全,您可以使用INQUIRE(UNIT=unit_number, EXIST=some_logical_variable)语句检查特定单元是否连接到OPEN语句之前的文件 - 如果是,则选择不同的单元号.理想情况下,如果您正在编写Fortran 2008,则可以使用NEWUNIT说明符.
(不要将单元号的值硬编码到输入/输出语句中 - 它们应始终由变量或命名常量表示,以便可以在一个地方轻松设置/更改值.)