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
后应该做什么。它应该再次进入那个循环吗?它应该立即退出第一个循环并重新启动第二个循环吗?
我认为只重复该语句或将其放在子例程中可能会更容易,以便从第一个循环内部和需要再次执行的地方调用。
我想知道如果第一个循环不满足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
后应该做什么。它应该再次进入那个循环吗?它应该立即退出第一个循环并重新启动第二个循环吗?
我认为只重复该语句或将其放在子例程中可能会更容易,以便从第一个循环内部和需要再次执行的地方调用。