我從輸入文件中讀取3個數組(X_halo
,Y_halo
,Z_halo
)。如果我寫入DO循環中加載的值,我可以正確地打印它們,但是不會出現循環。如果我嘗試打印X_halo(i)
的值,則會打印不正確的值。爲什麼在Fortran循環之外打印的值不正確?
我該怎麼辦?
program columns
IMPLICIT NONE
INTEGER,SAVE :: lun
INTEGER, PARAMETER :: ARRAYLEN=1044
CHARACTER(120) :: filename
DOUBLE PRECISION, DIMENSION (ARRAYLEN) :: X_halo, Y_halo, Z_halo
INTEGER :: i, istat
lun=1
filename = 'xyz.dat'
OPEN (UNIT=10, FILE=filename, STATUS='old', ACTION='read', IOSTAT=istat)
DO i=1,ARRAYLEN
READ (10, *, iostat=istat) X_halo(i), Y_halo(i), Z_halo(i)
! print*, 'id:', i, 'X= ', X_halo(i), 'Y= ', Y_halo(i), 'Z= ', Z_halo(i)
END DO
DO i=1,ARRAYLEN
print*, X_halo(i)
END DO
CLOSE (10)
end program columns
例如文件的第一列的第一行xyz.dat是:
281.0788
189.8768
669.2193
720.7653
但代碼返回:
6.9532597489392050E-310
2.2310395176993305E-314
6.9532121310250636E-310
6.9532238136146167E-310
問題二:如果你想將ARRAYLEN作爲自由變量來使用程序中的所有文件,我該怎麼做?
請將您的標題寫成真正簡短的問題。並且不要添加標籤。請參閱[問]和https://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –
如果您有兩個問題,請考慮提出兩個單獨的問題。 (我還沒有讀你當前的問題。) –
另外,你添加[tag:fortran90]標籤到你的問題。你確定你想限制自己這個非常舊的版本嗎?有Fortran 95,2003,2008和2015.Fortran 90真的很老,你需要堅持嗎?如果不是,只使用[tag:fortran]。 –