我的程序中有一个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条款?