Почему вообще выполняется второе условие if?
у меня есть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
статья?