Fortran 转到遗留错误

Fortran goto legacy error

我想知道如果第一个循环不满足if条件怎么可能重复。虽然我一直在尝试使用 goto 语句,但它给了我遗留错误。我该如何解决?

   10   do i=0,izmax
         some code
          do j=jmin,jmax
           some other code
          enddo
        enddo

    do i=0,izmax
      if (x < y) then
        write 
      else goto 10
    enddo 

在其他情况下,当循环中只有一件事应该重复时,方法是什么?我的意思是

     do i=0,izmax
         some code
          do j=jmin,jmax
           some other code
          enddo
  10 statement to be repeated
        enddo

    do i=0,izmax
      if (x < y) then
        write 
      else goto 10
    enddo 
notdone=.true.
do while(notdone)
 do i=0,izmax
    first loop
 enddo
 notdone=.false.
 do i=0,izmax
  if (x < y) then
    write 
  else
    notdone=.true.
    exit !exits inner loop
  endif      
 enddo 
enddo

您可以使用命名循环,将其设置为连续执行,但最后要有一个 exit 语句。然后,如果需要,您可以在到达终点之前 cycle 那个外循环。

outer : do
    do i = 0, izmax
        ! First Loop
    end do
    do i = 0, izmax
        if (x < y) then
            write(*, *) "Need to do again"
            cycle outer
        end if
    end do
    exit outer
end do outer

你的第二个问题比较难理解。程序再次完成 statement to be repeated 后应该做什么。它应该再次进入那个循环吗?它应该立即退出第一个循环并重新启动第二个循环吗?

我认为只重复该语句或将其放在子例程中可能会更容易,以便从第一个循环内部和需要再次执行的地方调用。