Fortran:DO 循环内的计数器

Fortran: Counter inside DO-loop

我有一个数组,我想从中获取一些信息。

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

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. 如果是逻辑上的错误,能否请大神指点一下,以后不要再犯这样的错误了?

问题是你的条件:

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

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

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

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

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

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