Разница между циклом while и циклом do while - PullRequest
32 голосов
/ 02 сентября 2010

В чем разница между циклом while и циклом do. Раньше я думал, что оба абсолютно одинаковы. Затем я наткнулся на следующий фрагмент кода:

do {
        printf("Word length... ");
        scanf("%d", &wdlen);
    } while(wdlen<2);

Этот код работает отлично. Он печатает длину слова и Tascans ввода. Но когда я изменил его на

while(wdlen<2){
        printf("Word length... ");
        scanf("%d", &wdlen);
    } 

Это дает пустой экран. Это не работает. Так что есть некоторая функциональная разница между обеими петлями. Кто-нибудь может это объяснить? Заранее спасибо.

РЕДАКТИРОВАТЬ: Есть ли другая разница в этих двух?

Ответы [ 16 ]

55 голосов
/ 02 сентября 2010

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

Принимая во внимание, что цикл while сначала проверит условие перед выполнением содержимого.

В этом случае вы ожидаете пользовательского ввода с помощью функции scanf (), которая никогда не будет выполняться в цикле , тогда как , поскольку wdlen не инициализируется и может просто содержать значение мусора, которое может быть больше 2.

18 голосов
/ 02 сентября 2010

Пока : ваше состояние находится в начале блока цикла и позволяет никогда не входить в цикл .

Делать пока : ваше условие находится в конце блока цикла и обязывает ввести цикл хотя бы один раз .

3 голосов
/ 02 сентября 2010
do {
    printf("Word length... ");
    scanf("%d", &wdlen);
} while(wdlen<2);

Цикл do-while гарантирует выполнение цикла хотя бы один раз, потому что он проверяет условие цикла ПОСЛЕ итерации цикла.Поэтому он напечатает строку и вызовет scanf, обновив, таким образом, переменную wdlen.

while(wdlen<2){
    printf("Word length... ");
    scanf("%d", &wdlen);
} 

Что касается цикла while, он оценивает условие цикла ДО выполнения тела цикла.wdlen вероятно, начинается с более чем 2 в вашем коде, поэтому вы никогда не достигнете тела цикла.

2 голосов
/ 22 апреля 2013

Пока:

  1. входной цикл управления

  2. условие проверяется перед выполнением цикла

  3. никогда не выполнять цикл, если условие ложно

  4. нет точки с запятой в конце оператора while

Do-while:

  1. выход из контура управления

  2. условие проверяется в конце цикла

  3. выполняет ложное условие хотя бы один раз, так как условие проверяется позже

  4. в конце оператора while есть точка с запятой.

2 голосов
/ 19 марта 2013

делать, находясь в цикле управления выходом.while - это цикл управления входом.

1 голос
/ 02 сентября 2010

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

В вашем примере wdlen может принять любое значение мусора, которое> 2, поэтому , в то время как цикл никогда не будет выполнен.

, тогда как делать пока цикл будет запущен и скажет вам ввести значение и проверить это значение в состоянии завершения

1 голос
/ 02 сентября 2010

Разница в том, когда условие оценивается.В цикле do..while условие не оценивается до конца каждого цикла.Это означает, что цикл do..while будет всегда выполняться хотя бы один раз.В цикле while условие оценивается в начале.

Здесь я предполагаю, что wdlen оценивается как ложное (т. Е. Больше 1) в начале цикла while,поэтому цикл while никогда не запускается.В цикле do..while он не проверяется до конца первого цикла, поэтому вы получите ожидаемый результат.

0 голосов
/ 12 декабря 2018

Самое важное различие между циклом while и do-while состоит в том, что в do-while блок кода выполняется по крайней мере один раз, даже если данное условие ложно.

Чтобы поставить егопо-другому:

  • while - ваше условие находится в начале блока цикла и позволяет никогда не входить в цикл.
  • в цикле while условие является первымпроверяется, а затем выполняется блок кода, если результат теста равен true.
0 голосов
/ 24 октября 2017

Разница между конструкциями while из шага 1 и do while заключается в том, что любые выражения в do {} будут выполняться хотя бы один раз, независимо от условия в предложении while().

println("\nStep 2: How to use do while loop in Scala")
var numberOfDonutsBaked = 0
do {
  numberOfDonutsBaked += 1
  println(s"Number of donuts baked = $numberOfDonutsBaked")
} while (numberOfDonutsBaked < 5)

Вот подробное объяснение: Объяснение Посещение: coderforevers

0 голосов
/ 28 августа 2017

Во время цикла:

while(test-condition)
{
      statements;
      increment/decrement;
}
  1. Меньшее время выполнения и скорость
  2. Цикл с условным вводом
  3. Нет фиксированного количества итераций

Цикл выполнения во время:

do
{
      statements;
      increment/decrement;
}while(test-condition);
  1. Более высокое время выполнения и скорость
  2. Выход из условного цикла
  3. Минимум одно итерационное число

Узнайте больше по этой теме здесь: Разница между циклом while и Do while

Это действительнодля программирования на C, Java-программирования и других языков, а также из-за того, что концепции остаются теми же, меняется только синтаксис.

Кроме того, еще один небольшой, но отличительный фактор, который следует отметить, состоит в том, что цикл do while состоит из точка с запятой в конце условия while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...