2016-05-11 11 views
1

Ich möchte N-Iterationen durchlaufen, aber einige der Iterationen sollten unter bestimmten Bedingungen "übersprungen" werden. Ich weiß, dass ich es tun kann, die goto Anweisung, wie zB:Überspringe Iterationen in einer do-Schleife (Fortran)

 do i = 1, N 
      if condition(i) goto 14 
      ! Execute my iteration if condition(i) is false 
    14 continue 
     end do 

Aber ich bin ein wenig Angst dieser goto Aussagen, und ich würde gerne wissen, ob es eine andere Lösung ist (ich bin mit Fortran 90 wäre aber an einer Lösung interessiert, auch wenn sie eine neuere Version benötigt).

Antwort

5

Versuchen Sie, diese

do i = 1, N 
      if (condition(i)) cycle 
      ! Execute my iteration if condition(i) is false 
end do 

Wenn Sie Erklärung benötigen, kommentieren, was Sie Klärung bedürfen. Hinweis Ich habe die archaische continue und beschriftete Aussage fallengelassen.

+0

Das ist genau das, was ich wollte. Ich hatte diese "Zyklus" -Anweisung gesehen, aber die Referenz, die ich darüber fand, falsch verstanden: Ich dachte, dass sie im Grunde die Schleife verlassen würde, ohne die verbleibenden Iterationen zu machen. Vielen Dank. – Feffe

2

Sie können auch dazu:

do i = 1, N 
     if (.not. condition(i)) then 
     ! Execute my iteration if condition(i) is false 
     endif 
    end do 
+0

Es ist in der Tat am offensichtlichsten, aber ich habe versucht, etwas weniger schwer in Bezug auf das Einrücken/Schreiben des Codes zu verwenden. Da 'condition (i)' selten 'wahr' ist, schien es "lesbarer" zu sein, es mit der 'cycle' Funktion zu schreiben. – Feffe