2

如果存在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 中的这种行为吗?

4

1 回答 1

2

不,读取失败后变量的值是未定义的。

Fortran 2008, 9.11.2

如果在执行包含 ERR= 说明符或 IOSTAT= 说明符的输入/输出语句期间发生错误情况,则:

...

如果语句是 READ 语句或错误条件发生在等待由 READ 语句启动的传输的操作中,则启动传输的语句中的所有输入项或名称列表组对象都将变为未定义;

于 2015-02-11T11:09:13.030 回答