оператор if

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
absdjfh
новенький
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

оператор if

Сообщение absdjfh »

Это не относится именно к Free Pascal, скорее, к паскалю вообще.
Рассмотрим такой оператор:

Код: Выделить всё

if A then
  if B then
    proc1
  else
    if C then
      proc2
else
  proc3;

Предположим, что условие A не выполнятся. Тогда, как это видно из структуры кода, должна выполняться процедура proc3.
На самом деле, ничего не выполняется, и вот почему:

Код: Выделить всё

if A then
  if B then
    proc1
  else
    if C then
      proc2
    else
      proc3;

Код - один и тот же, но здесь по структуре кода не должно выполняться ничего (так и происходит).
Проблему можно решить, добавив пустую ветку else:

Код: Выделить всё

if A then
  if B then
    proc1
  else
    if C then
      proc2
    else
else
  proc3;

Но это делает код непонятным. Вопрос: как исправить код правильно?
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

Пользоваться волшебными операторными скобками begin и end.
absdjfh
новенький
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Сообщение absdjfh »

да, все верно, спасибо!
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Там еще фигня, если условий больше одного , то нужно заключать в скобки , иначе глюки
if (A=1) or (b=1) then
Аватара пользователя
vada
энтузиаст
Сообщения: 689
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Предположим, что условие A не выполнятся. Тогда, как это видно из структуры кода, должна выполняться процедура proc3.

Код: Выделить всё

if C then
      proc2;

; поможет

Код: Выделить всё

if C then
      proc2
    else

Но это делает код непонятным.


Как уже сказал Максим begin и end вас спасет.
Ответить