Fortran内部带有goto的do循环

12

我有一段Fortran77的代码片段,如下所示:

    DO 1301 N=NMLK-2,2,-1                                                     
       Some code...
       IF(NB1(N).EQ.50) GOTO 1300                                                            
       Some code...
       IF(BS(N).EQ.0.0) GOTO 1301                                                
       some code...                                                               
       GOTO 1301                                                                 
  1300 NW(M)=NB1(N)                                                              
       Some code...                                                               
  1301 CONTINUE
当程序执行到GOTO 1301语句时,它会跳到循环的下一轮还是退出整个循环? 我理解return关键字什么也不做,所以我认为这将仅退出循环并从标签1301继续执行代码,这正确吗?
我正在将此翻译成C#,想知道这是否相当:
for (N = NMLK; N >= 2; N--)
{
    Some code...
    if (NB1[N] == 50)
        goto l1300;
    Some code...
    if (BS[N] == 0)
        return;
    Some code...
    return;
l1300:
    NW[M] = NB1[N];
    Some code...
}

我应该使用"continue"而不是"return"吗?

1个回答

12

是的,GOTO 1301语句会使程序跳到下一个迭代。

DO labellabel CONTINUE是一种过时的编写方式,更现代化的方法是使用DO ENDDO块。在这种情况下,循环将在DO行指定的变量上迭代,并且label CONTINUE行作为“ENDDO”占位符。


谢谢。为了绝对清楚,在这方面,GOTO 1301语句实际上将继续执行循环,直到满足循环终止的条件? - yu_ominae
是的。你的GOTO 1301会带你到1301 CONTINUE,它会重复执行直到循环终止。 - milancurcic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接