2012-01-05 27 views
10

我有一個的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... 
} 

,或者我應該有「繼續」,而不是「迴歸」?

回答

10

是的,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