0

gfortran を使用して Fortran 77 コードをコンパイルすると、次のエラーが発生します。

10 open (23,file=outfile,status='old',access='append',err=10)
1 警告: (1) で分岐すると無限ループになる可能性があります

これは数回発生します。

出力ファイルの 1 つは次のようになります。

^L6a10È <90> ) &<9b>LÓLÓLÕ<91><90> <90> <90> È <8e><9b>LÓLÓLÕ<93>2 !MERCURY ¢¤õ/!ô<8a><8a>< 90> ÿ<90> ÿ<90> ÿÌÖÏ©ü}M<91> "VENUS «}>±{©±<8b><90> ÿ<90> ÿ<90> ÿʺ93¿<8d>d<91>

ただし、テキストの表のように見える必要があります。

何か案は?

4

2 に答える 2

2

あなたのコード行

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

エラーが発生した場合にステートメントがそれ自体 (ラベル 10) に制御を転送する必要があることを指定しますopen。そのため、エラーが発生すると無限ループがトリガーされる可能性があります。また、エラー メッセージの出力も抑制します。エラー ステータスを確認するだけの場合は、iostatand/or iomsg(Fortran 2003) 引数を使用することをお勧めします。

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

これiosは、エラーが発生しない場合はゼロ、それ以外の場合はゼロ以外の整数でありstr、対応するエラー メッセージを記録する文字変数です。

于 2013-02-20T10:25:17.120 に答える
1

ステートメントのerr=引数は、何らかの理由で失敗した場合openに分岐するステートメント ラベルを指定します。openコードは、10たまたまopenステートメントを含む行であるというラベルの付いた行への分岐を指定します。これはおそらく良い考えではありません。openステートメントからのエラーを適切に処理する行に分岐することをお勧めします。

gfortran からの警告は的確です。

出力ファイル内の明らかなゴミに関しては、ゴミを書き込むために使用するコード (またはおそらく真珠と思われるもの) を見なければ、その問題を診断して修正することは非常に困難です。

于 2013-02-20T10:19:41.970 に答える