Fortran 如果从文件中读取错误,如何使用close语句?
我的IDE是: 代码::Blocks 20.3(编译器:mingw 9.2.0) 示例代码为:Fortran 如果从文件中读取错误,如何使用close语句?,fortran,gfortran,Fortran,Gfortran,我的IDE是: 代码::Blocks 20.3(编译器:mingw 9.2.0) 示例代码为: module mod_close_file implicit none integer :: n_something contains function proc_calling() result(err_loc) logical :: err_loc err_loc = .false. open( unit = 15, file = 'data_aa.txt', actio
module mod_close_file
implicit none
integer :: n_something
contains
function proc_calling() result(err_loc)
logical :: err_loc
err_loc = .false.
open( unit = 15, file = 'data_aa.txt', action = 'read', status = 'old', err = 100 )
read(15,*, err = 101) n_something
close(unit = 15, status = 'keep' )
return
100 write(*,'(5x,a)') "err_loc - proc_calling - reading format - 100"
err_loc = .true.
!close(unit = 15, status = 'keep' )
return
101 write(*,'(5x,a)') "err_loc - proc_calling - reading format - 101"
err_loc = .true.
!close(unit = 15, status = 'keep' )
end function proc_calling
end module mod_close_file
program close_file
use, non_intrinsic :: mod_close_file
implicit none
logical :: err_glo
err_glo = proc_calling()
if ( err_glo ) stop "err_glo - proc_calling"
end program close_file
如果指定文件中的值
n\u something
不是整数,程序将报告错误。在这种情况下,是否需要在return命令之后写入close命令?您会问,是否需要在停止执行之前关闭文件,或者文件是否将自动关闭?
9.5.7.1-6(第211页):
在程序执行终止的完成步骤(2.3.5)期间,所有连接的装置均关闭
2.3.5-4(第33页):
当执行STOP语句或end program stmt时,映像执行的正常终止开始
所以不,您不需要在调用STOP之前关闭它,它应该在不调用close的情况下关闭。(就我个人而言,无论如何我都会这么做)完全由你决定。如果要关闭文件,请关闭该文件。如果没有,请不要。本案例中的@IanBush文件未关闭?所以如果我想关闭它,我必须在返回后使用close?我不明白这个问题。你可以随时关闭它。关闭它和读取文件时出错是未连接的。您可以在程序中的任何位置对任何打开的文件使用“关闭”。@IanBush如果检测到读取错误,我想在之后关闭文件,并且我想退出程序(rest代码将不被执行),程序将停止。在这种情况下,如果我想这样做,我需要使用现在正在注释中的close命令?是的,要关闭一个文件,你需要一个close语句。我现在明白了。但是,如果我想在调用STOP之前关闭它,那么
close
的正确位置在哪里?是在return
之后吗?就像我的示例中一样?我认为没有正确的位置…您几乎可以在任何您想要的地方关闭它(在该函数、专用函数或主程序中…)。在您的示例中,调用close
previorreturn
,如果取消对这两个close
语句的注释,则应该可以。