我使用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 GT; < 90 GT; È< 8e>< 9b>LÓLÓLÕ< 93> 2 !MERCURY¢õõ/!ô< 8a>< 8a>< 90> Y'LT; 90> Y'LT; 90> ÿÌÖÏ©ü} M< 91> “VENUS”}>±{+±< 8b>< 90>< 90>< 90><>> 90>< 8>< 8>< 8>< 8>< 8>< 8>< 8>< 8>
但是,它应该看起来像一个文本表。
有什么想法吗?
答案 0 :(得分: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
是一个将记录相应错误消息的字符变量。
答案 1 :(得分:1)
err=
语句中的open
参数指定在open
由于某种原因失败时要转移到的语句标签。您的代码指定了标记为10
的行的分支,该行恰好是包含open
语句的行。这可能不是一个好主意;更好的想法是分支到一条优雅处理open
语句错误的行。
来自gfortran的警告现场。
对于输出文件中的明显垃圾,如果没有看到用于编写垃圾的代码(或者您认为可能是珍珠),则很难诊断并解决该问题。