Input 尝试将不正确的值读入变量会改变其值吗?
如果存在Input 尝试将不正确的值读入变量会改变其值吗?,input,error-handling,fortran,fortran2003,Input,Error Handling,Fortran,Fortran2003,如果存在iostat关键字,则如果发生I/O错误,程序不会停止。然后,如果我试图将一个不正确的值读入一个标量变量,I说,这个变量会保持不变吗?以下似乎有效: program test integer :: i, stat i = 1 do write (*, "('i = ')", advance='no') read (*, *, iostat=stat) i if (stat .eq. 0) then write
iostat
关键字,则如果发生I/O错误,程序不会停止。然后,如果我试图将一个不正确的值读入一个标量变量,I
说,这个变量会保持不变吗?以下似乎有效:
program test
integer :: i, stat
i = 1
do
write (*, "('i = ')", advance='no')
read (*, *, iostat=stat) i
if (stat .eq. 0) then
write (*, "('Valid integer. i has been set to ', I0)") i
else
write (*, "('Bad integer. i is still ', I0)") i
end if
end do
end program test
在Fortran 2003中是否可以依赖此行为?否,读取失败后的变量值未定义 Fortran 2008,9.11.2 如果过程中出现错误情况 执行包含ERR的输入/输出语句= 说明符或IOSTAT=说明符,然后: 如果该语句是READ语句,或者在 由READ语句启动的传输的等待操作 在启动的语句中输入项或名称列表组对象 转让不明确
是否只是因为某个编译器(在我的例子中是gfortran)的行为,上面的代码才起作用,而不是因为标准(我在那里找不到任何东西)?是的,但即使使用同一个编译器,它也可能在其他情况下失败。阅读F2008标准中的整个第9.11节。现在我也在Fortran 2003,9.10.1中找到了这个。谢谢