11

次のような 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...
}

または、「戻る」の代わりに「続行」する必要がある場合は?

4

1 に答える 1

11

はい、GOTO 1301ステートメントはプログラムを次の反復にジャンプさせます。

,はDO label、より現代的なブロックlabel CONTINUEを記述するための時代遅れの方法です。DO ENDDOこの場合、ループは DO 行で指定された変数を反復処理し、label CONTINUE行は " ENDDO" プレースホルダーとして機能します。

于 2012-01-05T06:34:08.253 に答える