我正在編寫我的代碼並在Fortran中使用輸入和輸出功能。代碼如下所示(只是爲了簡化):爲什麼在Fortran中使用命令PRINT覆蓋輸入文件?
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操作系統中的終端)獲得變量T
的結果,並將變量I
和A(I)
寫入文件output.dat
。我對變量I
和A(I)
沒有問題,因爲它們已成功寫入文件output.dat
。問題出在變量T
,它沒有出現在終端上,但它被寫入文件input.dat
。那麼,即使文件input.dat
中的前一個文件也沒有被覆蓋。任何人都可以給我這個建議嗎?
僅供參考,我也嘗試過其他的編譯器(使用Windows操作系統),例如:
- 微軟Fortran的(很舊的),但它的工作就像我的預期。
- MinGW-w64(適用於Windows的GCC版本):但它沒有正常工作。
Mhm,Linux上的GCC 5.3按預期工作。 –
@AlexanderVogt:您是否也嘗試過Gfortran 5.3,並獲得了與我相同的結果?我認爲我上面寫的代碼沒有錯,不是嗎? –
該代碼適合我。乍一看 - 我沒有看到問題。雖然我個人不會選擇自己的單位(提示:'newunit ='),特別是不要低於10。這可能會干擾STDIN/STDERR/STDOUT。 –