Fortran 90及更高版本强烈建议不要使用goto
语句。
但是,我仍然觉得在两种情况中都不得不使用它:
案例1 - 指示重新输入输入值,例如
program reenter
10 print*,'Enter a positive number'
read*, n
if (n < 0) then
print*,'The number is negative!'
goto 10
end if
print*,'Root of the given number',sqrt(float(n))
stop
end program reenter
案例2 - 评论程序的大部分连续部分(相当于C中的/* ... */
)。
例如。
print*,'This is to printed'
goto 50
print*,'Blah'
print*,'Blah Blah'
print*,'Blah Blah Blah'
50 continue
print*,'Blahs not printed'
如何摆脱使用goto
语句并在Fortran 90中使用上述两种情况中的一些替代方案?
答案 0 :(得分:3)
案例1
你所拥有的是一个无限循环,循环直到满足条件。
do
read *, n
if (n.ge.0) exit
print *, 'The number is negative!'
end do
! Here n is not negative.
或者可以使用do while
肿块。
案例2
非Fortran答案是:use your editor/IDE's block comment tool to do this。
在Fortran中,这样的流量控制可以是
if (i_dont_want_to_skip) then
! Lots of printing
end if
或(这不是Fortran 90)
printing_block: block
if (i_do_want_to_skip) exit printing_block
! Lots of printing
end block printing_block
但是,并不是说应该避免所有goto
,即使很多/都可以。{/ p>
答案 1 :(得分:0)
取决于你的意思&#34;程序的连续部分&#34;案例2可以跳过某些块结构的 out ,例如:
do i = 1,n
...
goto 1
...
enddo
...
1 continue
如果你遇到这样的事情,解开代码逻辑并用现代结构化编码取代可能是一个很大的挑战。所有更多的理由不去&#34;评论&#34;那样......