的Fortran做循环内部转到

问题描述:

我有一个的Fortran77片断,看起来像这样:的Fortran做循环内部转到

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... 
} 

,或者我应该有“继续”,而不是“回归”?

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

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

+0

谢谢。要明确这一点,GOTO 1301语句实际上会继续执行循环,直到满足循环终止的条件为止? – 2012-01-05 06:38:33

+0

是的。你的GOTO 1301带你到1301 CONTINUE,这将重复,直到循环结束。 – milancurcic 2012-01-05 06:40:53

+0

优秀。非常感谢,这非常有帮助。 – 2012-01-05 06:42:59