0

我使用 gfortran 编译了一个 fortran 77 代码并得到以下错误:

10 open (23,file=outfile,status='old',access='append',err=10)
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> "金星 «}>±{©±<8b><90> ÿ<90> ÿ<90> ÿʺ93¿<8d>d<91>

但是,它应该看起来像一个文本表。

有任何想法吗?

4

2 回答 2

2

你的代码行

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

指定open语句应在遇到错误时将控制权转移到自身(标签 10),因此任何错误都可能触发无限循环。它还抑制错误消息的输出。如果您只想检查错误状态,我建议使用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 回答