0

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

我写了一个小的 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. 如果错误在逻辑上,有人可以给我一些关于将来不要犯此类错误的指示吗?
4

2 回答 2

2

问题是你的条件:

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

一个数字(这里:)怎么能da1(i)同时> 1存在< -1?该条件始终为假,并且inn永远不会增加。

于 2015-02-20T09:39:05.717 回答
2

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

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

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

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

于 2015-02-20T12:22:54.837 回答