Fortran:DO循环中的计数器

时间:2015-02-20 09:35:34

标签: arrays fortran do-loops

我有一个数组,我希望从中获得一些信息。

我写了一个小的DO循环,但我不知道它为什么总是返回

integer :: inn=0
parameter :: m=115200
real*8 :: da1(m)

DO i=1, 115200
    IF( i<=19200 .and. da1(i)>1 .and. da1(i)<999.9999 .and. da1(i)<-1 )then
        inn=inn+1
    END IF
END DO
write(*,*) 'inn=',inn
  1. 为什么它总是打印0,而我检查了文件,这个数组确实在定义的范围内有很多值
  2. 如果故障属于逻辑,有人可以给我一些关于未来不会犯这样错误的指示吗?

2 个答案:

答案 0 :(得分:2)

问题在于您的条件:

da1(i).gt.1.00 .and. da1(i).lt.999.9999 .and. da1(i).lt.-1.000

一个数字(此处:da1(i))如何同时为> 1< -1?该条件始终为false,inn永远不会递增。

答案 1 :(得分:2)

扩展评论而不是回答。循环可以完全替换,可能是

count( da1(1:19200)>1 .and. da1(1:19200)<999.999 )

我写可能因为我没有测试过这个。

我认为在i = 1, 115200范围内循环,然后在循环内部测试i<=19200是错误的。如果要循环,请写i = 1, 19200