Форум: Форум C++Разное
Новые темы: 00
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: while( 1 ) VS do while()
 
 автор: aetep   (17.03.2007 в 18:56)   письмо автору
 
 

Уже несколька раз видел цикл:

  while( 1 )
  {
     if( условие выхода ) break;
     // код
  }


И хочу узнать чем плох do while() что его не используют, когда надо.

  do
  {
    //код
  } while( условие выхода );

  Ответить  
 
 автор: cheops   (17.03.2007 в 19:25)   письмо автору
 
   для: aetep   (17.03.2007 в 18:56)
 

Он не плох и не хорош... while(1) в начале сразу настраивает программиста на то, что цикл будет выполняться долго, а в его теле, где-то предусмотрен выход. Цикл do ... while() настраивает на то, что тело цикла будет выполнено хотя бы один раз. Более того, часто можно встретить конструкцию
  do
  {
    if( условие выхода ) break;
    //код
    if( условие выхода ) break;
    //код
    if( условие выхода ) break;
  } while(false);

Которая гарантирует не более одного цикла и эмулирует работу оператора goto, за счёт досрочного выхода из цикла при помощи break.

  Ответить  
 
 автор: aetep   (17.03.2007 в 19:31)   письмо автору
 
   для: cheops   (17.03.2007 в 19:25)
 

Я демаю что разницы между while( 1 ) и do while() нету, так зачем лишний break;

  Ответить  
 
 автор: oleg_alexeev   (18.03.2007 в 00:29)   письмо автору
 
   для: aetep   (17.03.2007 в 19:31)
 

Приведенные тобой циклы не эквивалентны. Если условие выхода истинно до входа в цикл, то
тело цикла в первом случае не выполнится ни разу, а во втором случае выполнится один раз.

  Ответить  
 
 автор: alex19921992   (18.03.2007 в 08:16)   письмо автору
 
   для: oleg_alexeev   (18.03.2007 в 00:29)
 

Как пошутил один мой одноклассник, цикл while сначала думает,а потом делает, а цикл do while сначала делает, а потом думает))

  Ответить  
 
 автор: rty   (19.03.2007 в 11:54)   письмо автору
 
   для: oleg_alexeev   (18.03.2007 в 00:29)
 

>Приведенные тобой циклы не эквивалентны. Если условие выхода истинно до входа в цикл, то
>тело цикла в первом случае не выполнится ни разу, а во втором случае выполнится один раз.

Если в while() условье истина то цикл выполнится хотябы один раз, как и в do...while()

  Ответить  
 
 автор: oleg_alexeev   (19.03.2007 в 12:53)   письмо автору
 
   для: rty   (19.03.2007 в 11:54)
 

Виноват, ошибся. Надо было написать ".. то код в первом случае не выполнится ни разу ...".

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

Если бы было написано так:

  while( 1 )
  {
     // код
     if( условие выхода ) break;
  }

Тогда это соответствовало бы do {} while();

  Ответить  
 
 автор: rty   (19.03.2007 в 12:59)   письмо автору
 
   для: oleg_alexeev   (19.03.2007 в 12:53)
 

>

>  while( 1 )
>  {
>     // код
>     if( условие выхода ) break;
>  }
>

>Тогда это соответствовало бы do {} while();

В начале темы этот код есть

  Ответить  
 
 автор: oleg_alexeev   (19.03.2007 в 13:11)   письмо автору
 
   для: rty   (19.03.2007 в 12:59)
 

В начале темы код такой:

  while( 1 )
  {
    if( условие выхода ) break;
    // код
  }


Я так полагаю, что комментарий "// код" означает некий полезный кусок кода.
Так вот он не выполнится ни разу, если условие выхода истинно перед входом в цикл.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования