我的程序中有一个do while
循环,谁有条件继续给我一个错误,我不知道为什么。它看起来像这样:
do while (ii .le. nri .and. ed(ii) .le. e1)
! do some stuff...
ii = ii + 1
end do
其中ii
和nri
是标量整数,e1
是标量实数,并且ed
是长度为的实数数组nri
。我期望在最后一次运行后发生的是,因为ii.le.nri
返回.false.
第二个条件从未被测试过,而且我没有遇到任何不合时宜的问题。我已经用确实返回的调试器进行了验证ii.le.nri
-但程序.false.
崩溃了。
为了验证我只测试一个条件的假设,我什至编写了一个小测试程序,我使用相同的编译器选项编译它:
program iftest
implicit none
if (returns_false() .and. returns_true()) then
print *, "in if block"
end if
contains
function returns_true()
implicit none
logical returns_true
print *, "in returns true"
returns_true = .true.
end function
function returns_false()
implicit none
logical returns_false
print *, "in returns false"
returns_false = .false
end function
end program
正如我所料,运行此程序仅输出
$ ./iftest
in returns false
并退出。第二个测试永远不会运行。
为什么这不适用于我的do while
条款?