2015-02-11 62 views
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中依賴此行爲嗎?

回答

2

不,不成功讀取後變量的值是未定義的。

的Fortran 2008,9.11.2

如果 執行包含任一種ERR = 說明符或IOSTAT =說明然後一個輸入/輸出語句的過程中發生錯誤條件:

。 ...

如果語句是READ語句或錯誤條件發生在 由READ語句啓動的傳輸的等待操作,所有 輸入項或名稱在發起 轉移的語句中st組對象變爲undefined;

+0

僅僅是因爲某個編譯器(在我的情況gfortran)上述代碼的行爲,而不是因爲標準(我找不到任何東西)的行爲? – 2015-02-11 11:15:06

+0

是的,但即使使用相同的編譯器,在另一種情況下也可能會失敗。閱讀F2008標準中的全部9.11節。 – 2015-02-11 11:15:43

+0

現在我也在Fortran 2003,9.10.1中找到了這個。謝謝! – 2015-02-11 11:28:54