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
- 为什么它总是打印 0,而我检查了文件,这个数组确实在定义的范围内有很多值
- 如果是逻辑上的错误,能否请大神指点一下,以后不要再犯这样的错误了?
问题是你的条件:
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
.
我有一个数组,我想从中获取一些信息。
我写了一个小的 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
- 为什么它总是打印 0,而我检查了文件,这个数组确实在定义的范围内有很多值
- 如果是逻辑上的错误,能否请大神指点一下,以后不要再犯这样的错误了?
问题是你的条件:
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
.