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中找到了这个。谢谢