在 Fortran 95 中重新执行语句

Re-executing statements in Fortran 95

抱歉这个菜鸟问题,但我需要一些帮助来弄清楚如何在逻辑块完成检查用户输入后return执行回到子例程的开始。

Program FibSequence 
Integer(2) :: n_terms
print*, "Please Enter number 0-99"
read*,n_terms
call check_term()
End Program
Subroutine check_term()

if n_terms <= 0 then 
!print stuff
read*, n_terms
return
else if n_terms > 99 then
!print stuff
read*, n_terms
return
else
print*, "you have chosen " , n_terms
end

程序执行成功,但没有做它应该做的事情。

我怀疑程序会进入检查,然后当它这样做时,如果选择的号码不正确,例如号码 > 99 或 <= 0 那么它 "rereads" 用户的 n_terms输入然后 return 执行到主程序,导致程序终止。

结果应该是,当数字选择不正确时,子例程完全是 运行,而不是从主程序转到下一行执行 - 这将是结束程序。

不胜感激!

应该可以使用备用 return,但备用 return 在过时功能列表中。也许,实现您想要做的事情的最简单方法是使用无限 DO 循环,该循环在有效输入时退出。

Program FibSequence 
  Integer(2) :: n_terms   ! Note, non-portable kind type parameter
  print*, "Please Enter number 0-99"
  do
     read*,n_terms
     if (n_terms > -1 .and. n_terms < 100) exit
  end do
  ! Do something with n_terms.
End Program