Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование процедуры Break


Anthony ©   (2011-01-06 02:50:00) 

Подскажите пожалуйста, почему испольование Break внутри нескольких циклов:

for i := 0 to 100
 for j := 0 to 100
   for k := 0 to 100
     Break;

- приводит к выпадению сразу из всех циклов, а не только из того цикла (в данном случае по k), в котором находится Break ?

Есть ли в Delphi какие-то опции компилятора, чтобы по Break прерывать только тот цикл, в котором вызвана эта процедура ?


RWolf   (2011-01-07 16:07:00) [1]

хм, мне такое накодить даже в голову не приходило.
goto в процедуру, надо же.


oxffff   (2011-01-07 16:06:00) [2]


> Anthony ©   (06.01.11 02:50)  
> Подскажите пожалуйста, почему испольование Break внутри
> нескольких циклов


Очень удобно для выхода из нескольских циклов использовать отдельную вложенную процедуру(в которую вынесены циклы) с использованием exit в ней.


jack128_   (2011-01-07 15:11:00) [3]


> Очень удачны бывают переходы в тело цикла DO, особенно из
> других модулей. Хотя трансляторы, как правило, это запрещают,
>  их легко обвести вокруг пальца, пользуясь переменными типа
> метки. Передача управления в вызываемую процедуру в обход
> заголовка принесет Вам долгие часы счастливых раздумий над
> кодом завершения ОС5.


Пару лет эта цитата висит у нас в свн. Наконец она пригодилась!!! Ура!


Rouse_   (2011-01-07 10:07:00) [4]


> Ega23 ©   (06.01.11 17:20) [7]
>
> Все циклы прерывает Exit или Goto:)

Очень удачны бывают переходы в тело цикла DO, особенно из других модулей. Хотя трансляторы, как правило, это запрещают, их легко обвести вокруг пальца, пользуясь переменными типа метки. Передача управления в вызываемую процедуру в обход заголовка принесет Вам долгие часы счастливых раздумий над кодом завершения ОС5.


Halt   (2011-01-06 23:16:00) [5]

Все циклы прерываю я.


Ega23   (2011-01-06 17:20:00) [6]

Все циклы прерывает Exit или Goto :)


Anthony   (2011-01-06 16:36:00) [7]

Да, извиняюсь, что-то видно я напутал в коде, не могу повторить это "недоразумение", которое каким-то образом ранее получил в своей программе, всё оказывается работает, как надо...
Но хорошо, что спросил, потому что до задания этого вопроса на форум - в голове осталась неверная информация, что Break прерывает сразу все циклы.

Благодарю всех, кто откликнулся помочь!..


Anatoly Podgoretsky   (2011-01-06 12:17:00) [8]

> Германн  (06.01.2011 03:25:01)  [1]

Ошибка только в мозгах, первые два цикла так быстро выполняются, что
кажется, что кажется.


Юрий Зотов   (2011-01-06 10:06:00) [9]

> Anthony ©   (06.01.11 02:50)

Из справки:

You can use the standard Break and Continue procedures to control the flow of a repeat, while, or for statement. Break terminates the statement in which it occurs , while Continue begins executing the next iteration of the sequence.

В реальности так оно и есть, так что действительно ищите ошибку в программе.


KilkennyCat   (2011-01-06 09:57:00) [10]


> опции компилятора

новый стиль программирования - переключений опций компилятора....


KilkennyCat   (2011-01-06 09:56:00) [11]

continue  или goto


Германн   (2011-01-06 03:25:00) [12]


> чтобы по Break прерывать только тот цикл, в котором вызвана
> эта процедура

Так оно и есть и всегда было. Ищи ошибку в программе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо