Fortran - 循环外的goto是否也被认为是循环的结束?

时间:2015-02-20 00:06:05

标签: fortran

下面你可以看到,基于if语句,将跳转到标签305或标签320.当跳转到305时,会有一个continue语句,所以循环结束但跳转时到320是没有继续声明所以这是否意味着它仍然在循环中?

DO 305 I = 1,L
           IF (ICHAR(D(I)) - ICHAR("-")) 305,320,305
305    CONTINUE
       GO TO 390
320    WRITE (*,*) D(1:L)

2 个答案:

答案 0 :(得分:1)

do构造的范围是(算术)if语句和标记为continue的语句。执行continue语句后,循环的下一次迭代(如果有的话)开始。

continue本身并不特别:它是一个允许语句终止循环结构(if语句不允许终止它),没有其他效果,但几乎任何其他可执行语句都将被允许填充该终止角色。特别是,continue并不代表"开始我们在#34;中的任何一个循环的下一次迭代。

所以:跳转到标记为305的语句仍然在循环结构中;跳到标有320的那个离开了循环结构,没有continue会让我们回到它里面。在后一种情况下,循环终止,i保留跳转时的值。

[你在一个密切相关的问题的回答中看到了a"现代"这段代码的版本。]

答案 1 :(得分:1)

我认为你可以使这个现代化

DO 305 I = 1,L
           IF (ICHAR(D(I)) - ICHAR("-")) 305,320,305
305    CONTINUE
       GO TO 390
320    WRITE (*,*) D(1:L)
390    CONTINUE

DO I=1,L
    IF( ICHAR(D(I))==ICHAR("-") ) THEN
        WRITE (*,*) D(1:L)
        EXIT
    END IF
END DO

EXIT命令退出内部DO循环,CYCLE命令在下一次迭代时继续循环。