【发布时间】:2016-11-27 11:15:00
【问题描述】:
我正在编写代码并在 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
我使用的是 Gfortran 5.3,结果与我预期的不一样。我希望在程序运行时在屏幕(或 Ubuntu OS 中的终端)上获得变量T 的结果,并将变量I 和A(I) 写入文件output.dat。我对变量I 和A(I) 没有问题,因为它们已成功写入文件output.dat。问题在于变量T,它没有出现在终端上,但它被写入了文件input.dat。好吧,即使是文件input.dat 中的前一个文件也没有被覆盖。谁能给我建议?
仅供参考,我也尝试过其他编译器(使用 Windows 操作系统),例如:
- Microsoft Fortran Powerstation(非常旧的):但它的工作方式符合我的预期。
- MinGW-w64(适用于 Windows 的 GCC 版本):但它不能正常工作。
【问题讨论】:
-
嗯,Linux 上的 GCC 5.3 正在按预期工作。
-
@AlexanderVogt:你在 Gfortran 5.3 上也试过了吗,你和我得到了同样的结果吗?我认为我上面写的代码没有错误,不是吗?
-
代码对我来说很好用。乍一看 - 我没有看到问题。虽然我个人不会自己选择单位(提示:
newunit=),尤其是十以下的数字。这可能会干扰 STDIN/STDERR/STDOUT。 -
@AlexanderVogt:对不起,我没有收到你的消息。对于“代码对我来说很好”,您是说您也在使用 Gfortran,但代码运行良好还是您使用的是 gcc?
-
gfortran是 GCC 的 Fortran 编译器。