很多年前我使用过FORTRAN,并且最近负责维护一个旧的FORTRAN程序(F77).以下代码不熟悉:
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS,
. ( BUFFER(BIX), BIX=1, NUM_WORDS )
Run Code Online (Sandbox Code Playgroud)
回顾一些在线论坛发现,让我感到困惑的部分,即延续线,是一个隐含的循环.由于我的程序在这里给我带来麻烦,我想将其转换为传统的DO循环.转换它也可能有助于下一个从现在起5年后冷却这个东西的可怜的邋!!无论如何,我对DO循环等效的最佳猜测是
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
DO BIX=1, NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) BUFFER(BIX)
ENDDO
Run Code Online (Sandbox Code Playgroud)
但是,当我只进行此更改时,正在运行的测试用例停止工作.我仍然觉得这里发生的是两个不同的READ(第一个获得NUM_WORDS,第二个循环数据),所以我尝试了一个不那么激烈的变化,将其转换为两个语句但保留隐含的循环:
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) ( BUFFER(BIX), BIX=1, NUM_WORDS )
Run Code Online (Sandbox Code Playgroud)
但只是这种变化也会导致良好的测试用例失败.在我的两个改动中,NUM_WORDS的值正如预期的那样,所以看起来循环就是它失败的地方.
那么,原始隐含循环的等效DO循环是什么?或者我完全走错了路?
谢谢