我有一个从输入文件中读取信息的程序。由于代码没有任何错误,因此可以成功编译。我的问题是即使有读错误,程序仍在运行,当程序变大并且我很难找到错误发生的地方时,这不是一件好事。
该计划是:
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
答案 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