Fortran 如果从文件中读取错误,如何使用close语句?

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

我的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', 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
previor
return
,如果取消对这两个
close
语句的注释,则应该可以。