Заявление GoTo()
обычно рассматривается как корень всего зла. Это может показаться удобным, но создает больше проблем, чем нужно решать. И действительно, первое, что нужно сделать, это избавиться от этого и здесь.
Одна возможность в некоторых выпусках Паскаля - это выражение BREAK
, чтобы выйти из цикла. Если KAREL не поддерживает, и даже если это так, я считаю, что лучше использовать цикл другого типа. Вместо этого вы можете использовать цикл REPEAT .. UNTIL condition
, который по своей природе обеспечивает упорядоченный выход из цикла следующим образом:
for I=1 to 200 DO
Excluded := False
j := 0
REPEAT
J := J + 1
IF exclude[j]=i THEN
Excluded := True
UNTIL (J = 5) or Excluded
if not excluded then
begin
bunch of code
end
ENDFOR
Это позволяет вам немедленно выйти из цикла REPEAT UNTIL
, когда вы найдете совпадение в массиве exclude[]
. Затем, проверяя новую переменную Excluded: boolean
, вы знаете, запускать ли bunch of code
.
PS. В моем примере кода частично используется синтаксис Delphi Pascal, надеюсь, вы сможете его расшифровать.
PS2. Просто из любопытства я скачал руководство KAREL Reference Manual v. 6.3.1
и, глядя на A.6.3 FOR...ENDFOR Statement
одну из пуль, говорит: Никогда не вводите оператор GO TO в цикле FOR. Если оператор GO TO заставляет программу выходить из цикла FOR, программа может быть прервана с ошибкой «Переполнение стека во время выполнения». Полагаю, это руководство будет полезно и в других ситуациях.
PS3. Взгляните также на упомянутое выше руководство, пункт 4.2.2, в котором также описывается третий тип цикла - WHILE...ENDWHILE
.