嗯,代碼應該工作。如果你真的給我們提供了編譯器版本和選項,那本來會很好。 我的意思是說,你沒有關閉你打開的文件,但是由於程序終止,它不應該是一個問題。
我會做的是使用錯誤狀態和-message變量,像這樣:
program project5_03
implicit none
integer :: n
integer :: ios
character(len=200) :: iomsg
open (unit=21, file='trial.txt', status='old', iostat=ios, iomsg=iomsg)
call check(ios, iomsg, "OPEN")
read (21,*, iostat=ios, iomsg=iomsg) n
call check(ios, iomsg, "READ n")
write(*,'(1x,a,i4)', iostat=ios, iomsg=iomsg), "this is the value of n", n
call check(ios, iomsg, "WRITE to STDOUT")
stop
contains
subroutine check(ios, iomsg, op)
implicit none
integer, intent(in) :: ios
character(len=*), intent(in) :: iomsg, op
if (ios == 0) return
print*, "Encountered Error ", ios, " during ", op
print*, iomsg
stop
end subroutine check
end program
也許這將幫助您找到的bug。
還有一個事實,即您使用integer :: n = 0
- 這對主程序不應該有問題,但在子程序中這意味着SAVE
屬性。
顯示如何編譯代碼非常重要。回溯非常可疑,使用'-g -fbacktrace'或類似命令會更有用。 –
你能成功編譯並運行更簡單的代碼嗎? – agentp
請在'open'語句中使用'newunit'說明符。硬編碼文件識別單元非常容易出錯。 – jlokimlin