Arrays Fortran:DO循环内的计数器

Arrays Fortran:DO循环内的计数器,arrays,fortran,do-loops,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(*,*)

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

我写了一个小的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
integer::inn=0
参数::m=115200
实*8::da1(m)
i=1115200吗

如果(i1.和.da1(i)问题在于您的条件:

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

一个数字(这里:
da1(i)
)怎么能同时是
>1
<-1
?这个条件总是错误的,而且
inn
永远不会递增。

问题在于你的条件:

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 )

count(da1(1:19200)>1.and.da1(1:19200)扩展注释而不是答案。循环可以完全替换,可能是

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

count(da1(1:19200)>1.和.da1(1:19200)我强烈建议OP使用更可读的语法来查看它。即,使用空格和符号
if(i1.和.da1(I)@VladimirF当然,下次我会小心的。谢谢你的建议。@PT2009不需要改变这个问题。在你的代码中使用它以避免将来的错误是很重要的。我强烈建议OP使用更可读的语法来查看它。例如,使用空格和符号
if(i1.and.da1(I)@VladimirF当然,下次我会小心的。谢谢你的建议。@PT2009无需更改问题。在代码中使用它以避免将来的错误是很重要的。