Author Topic: Goto и циклы  (Read 3651 times)

0 Members and 2 Guests are viewing this topic.

andrace

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Goto и циклы
« on: June 10, 2015, 11:42:07 AM »
Столкнулся с такой проблемой, если у меня идёт три цикла(while) подряд и например в среднем есть goto, то после перехода по goto скрипт прдолжает выполнять третий цикл. Что я делаю не так?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Goto и циклы
« Reply #1 on: June 10, 2015, 02:09:14 PM »
Столкнулся с такой проблемой, если у меня идёт три цикла(while) подряд и например в среднем есть goto, то после перехода по goto скрипт прдолжает выполнять третий цикл. Что я делаю не так?
Нельзя выпрыгивать/впрыгивать и перемещаться между циклами через GOTO.

После того как программа встретила начало цикла WHILE, FOR пока она не встретит конец цикла, всё считается телом цикла.

WHILE()  // это начало, сюда вернётся для проверки условия после того как встретит END_CYC
//пока условие верно, программа помнит что выполняется тело цикла n-го уровня вложенности
//...
END_CYC

Если перепрыгнуть в другой:
Code: (clickermann) [Select]
WHILE()  // 1
//...
GOTO(tuda)
//...
END_CYC //1

WHILE()  // 2
//...
tuda:
//...
END_CYC //2

В строке 1 начался цикл.
в строке 3 мы прыгнули на 9
в строке 11 мы увидели END_CYC соответственно понимаем, раз нового вложенного WHILE небыло, мы сейчас дошли до последней строки первого цикла (со строки 1) куда и переходим.
« Last Edit: June 10, 2015, 02:10:54 PM by Vint »


andrace

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Goto и циклы
« Reply #2 on: June 10, 2015, 10:04:18 PM »
Cпасибо

Sabin

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Goto и циклы
« Reply #3 on: June 12, 2015, 06:01:38 PM »
Cпасибо
Возможность сделать подобный финт - одна из главных причин, почему во многих языках отказываются от goto или крайне не рекомендуют его использовать.