fortran中的这个错误是什么?当它发生时,如何停止程序?

fortran中的这个错误是什么?当它发生时,如何停止程序?,fortran,Fortran,我有一个从输入文件中读取信息的程序。由于代码没有错误,因此可以成功编译。我的问题是,即使有读取错误,程序仍然在运行,当程序变得更大,并且我很难找到错误发生的地方时,这不是一件好事 该计划是: program main implicit none integer ioerr, switch_1(3), switch_2, i open(100, FILE='./input_error.gr', ACTION='READ', IOSTAT=ioerr) if (ioerr == 0

我有一个从输入文件中读取信息的程序。由于代码没有错误,因此可以成功编译。我的问题是,即使有读取错误,程序仍然在运行,当程序变得更大,并且我很难找到错误发生的地方时,这不是一件好事

该计划是:

program main

implicit none

integer ioerr, switch_1(3), switch_2, i

   open(100, FILE='./input_error.gr', ACTION='READ', IOSTAT=ioerr)
   if (ioerr == 0) then
     read(100,*) (switch_1(i), i=1,3)
     write(*,*) 'Switch_1 is: ', switch_1
     read(100,*) switch_2
     write(*,*) 'Switch_2 is: ', switch_2
   else
     write(*,*) 'File not read'
   end if

end program main
输入文件为:

1,2,3
3
1,2
这个很好用。但如果输入文件为:

1,2,3
3
1,2
我将得到一个读取错误,我不知道它是什么,并希望程序在每次发生此错误时停止,如果可能,会给我一条错误消息,就像我打开文件时所做的那样:

forrtl: severe (24): end-of-file during read, unit 100, file /Users/ranranking/develop/test/switch_test/./input_error.gr
Image              PC                Routine            Line        Source
a.out              0000000107D1114E  Unknown               Unknown  Unknown
a.out              0000000107D2D686  Unknown               Unknown  Unknown
a.out              0000000107D2B7D4  Unknown               Unknown  Unknown
a.out              0000000107CFAA30  Unknown               Unknown  Unknown
a.out              0000000107CFA91E  Unknown               Unknown  Unknown

您的程序已到达文件末尾。您可以使用返回代码来标识文件结束条件,并在程序中对其作出响应。一些代码片段显示了一种方法:

   use, intrinsic :: ISO_FORTRAN_ENV

   .....

   ReadFile: do

      read (data_LUN, '(A)', iostat=ReadCode)  line

      if ( ReadCode /= 0 ) then
         if ( ReadCode == iostat_end ) then
            write (*, *) "End of file"
            exit ReadFile    ! end of file -- exit read loop
         else
            write ( *, '( / "error reading the data file: ", I0 )' )  ReadCode
            stop
         end if
      end if

      read (line, *) .....

      ......

   end do ReadFile

谢谢你的回复!你能告诉我什么是iostat\u end吗?
isostat\u end
是文件错误端的值。它由内部模块
ISO_FORTRAN_ENV
提供。否则,每个编译器可能使用不同的数值,很难测试这种情况。