2015-07-28 2 views
0

Мне интересно, как можно повторить первый цикл, если он не соответствует условию if. Хотя я пытался использовать оператор goto, он дает мне устаревшую ошибку. Как я могу это исправить?Fortran goto legacy error

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 
+0

Положите петлю в подпрограмму и вызовите ее. –

+0

Это мне очень помогает :) Но в другом случае, когда мне нужно было бы только одно утверждение за пределами второго цикла, чтобы повторить то, что должно быть у меня тогда? – galizius

ответ

1
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 
+0

Большое вам спасибо, это тот ответ, который я искал. – galizius

1

Вы можете использовать именованный цикл, установите его непрерывно выполнять, но есть 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. Должна ли она снова войти в этот цикл? Должен ли он немедленно выйти из первого цикла и перезапустить второй?

Я думаю, что было бы проще просто повторить утверждение или поместить его внутри подпрограммы, которая будет вызвана из первого цикла, и откуда она должна быть выполнена снова.

Смежные вопросы