2014-06-24 96 views
1

例如,我想以1为增量从1循环到500.然而,对于每8个循环,我想跳过接下来的18个循环(使do变化增加18)。我怎么做?如何在Fortran的do循环中跳过几次迭代

我的代码是:

event = 0 
do i = 1,500,2 
    event = event + 1 
    if (event .eq. 8) then 
      i = i + 18 
      event = 0 
    endif 
enddo 

但是,我得到了错误:“一个DO体内的DO变量不应出现在变量定义背景”。基本上我不能改变循环中的变量“我”。那么我应该如何编写代码来实现它呢?

谢谢。

+1

这是一个错误,因为Fortran允许根据您的'do i ...'行完全基于计算出的数字来优化您的循环(并且必须知道迭代次数)。这是Fortran为了优化目的而牺牲的(很多)事情之一。 – casey

回答

4

禁止修改循环索引。你可以用几种方式解决你的问题。举例来说,这里是没有明确的循环索引的解决方案:

i = -1 
do 
    i=i+2 
    if(i > 5000) exit 
    if (i == 15) i=i+18 
    ... 
enddo 
+2

同样'做同时(我<5000)' – agentp

+0

辉煌!谢谢! – FalloutRanger

1

考虑这个例子嵌套循环,像

do k=0,15 
    do j=0,7 
     i=34*k+2*j ! 34 == 18+2*8 
     .... 
    end do 
    end do 

(可能是我没有算术,其实你看到的想法)