在所有情况下我们都可以避免转到吗?

时间:2014-08-28 16:41:25

标签: fortran fortran90 goto

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中使用上述两种情况中的一些替代方案?

2 个答案:

答案 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;那样......