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
提供。否则,每个编译器可能使用不同的数值,很难测试这种情况。