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 に答える