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

时间:2015-07-16 21:35:36

标签: 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) 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

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

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

1 个答案:

答案 0 :(得分:4)

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

   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