Повторное выполнение операторов в Fortran 95 - PullRequest
0 голосов
/ 18 июня 2020

Извините за вопрос noob ie, но мне нужна помощь в выяснении, как вернуть выполнение обратно к началу подпрограммы после того, как логический блок завершит проверку пользовательского ввода.

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, затем он "перечитывает" n_terms для пользовательского ввода, затем возвращает выполнение в основную программу, что приводит к завершению программы. вместо перехода к следующей строке выполнения из main - которая будет конечной программой.

Помощь будет признательна, спасибо!

1 Ответ

2 голосов
/ 18 июня 2020

Должна быть возможность использовать альтернативный возврат, но альтернативный возврат есть в списке устаревших функций. Возможно, самый простой способ добиться того, что вы хотите сделать, - это использовать бесконечное число DO l oop, которое выходит при правильном вводе.

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
...