2013-02-20 107 views
0

我使用gfortran,並出現以下錯誤編譯FORTRAN 77碼分支警告:奇怪的輸出和編譯時

10開(23,文件= outfile中,狀態=「老」,獲得=「追加」,ERR = 10)
警告:(1)處的分支可能導致無限循環

這會發生多次。

一個輸出文件的如下所示:

^L6a10È< 90>)& < 9B>LÓLÓLÕ< 91> < 90> < 90> < 90>È< 8E> < 9B>LÓLÓLÕ< 93> 2 !MERCURY¢¤õ/ O!< 8A> < 8A> < 90>ÿ< 90>ÿ< 90>ÿÌÖÏ©ü} M < 91> 「VENUS«}>±{©±< 8B> < 90 >ÿ< 90>ÿ< 90>ºÊº93¿< 8d> d < 91>

但是,它應該看起來像一張文字表。

任何想法?

回答

1

open語句中的err=參數指定一個語句標籤,以便在出於某種原因導致open失敗時分支到該語句標籤。你的代碼指定一個分支標記10線正好是包含open語句行。這可能不是一個好主意;一個更好的主意是分支到一條優雅地處理open聲明中的錯誤的行。

從gfortran警告是即期。

至於在輸出文件中的明顯的垃圾,不能看見你用寫的垃圾代碼(或你的想法是珍珠也許)這是非常難以診斷和解決這個問題。

2

你的代碼

10 open (23,file=outfile,status='old',access='append',err=10) 

行指定open語句應該在控制移交給自己(標籤10)遇到錯誤,所以任何錯誤可能引發無限循環。它也會抑制錯誤消息的輸出。如果你想只檢查一個錯誤狀態,我會建議使用iostat和/或iomsg(Fortran 2003的)參數:

open (23, file=outfile, status='old', access='append', iostat=ios, iomsg=str) 

這裏ios是一個整數,如果出現非零值沒有錯誤,否則這將是零,並且str是一個字符變量,它將記錄相應的錯誤消息。