Разница между циклом 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 ]

0 голосов
/ 17 мая 2017

Разница между do while (проверка на выход) и while (проверка входа) заключается в том, что при входе в do он не проверяется, а во время первой проверки

Пример таков:

Программа 1:

int a=10;
do{
System.out.println(a);
}
while(a<10);

//here the a is not less than 10 then also it will execute once as it will execute do while exiting it checks that a is not less than 10 so it will exit the loop

Программа 2:

int b=0;
while(b<10)
{
System.out.println(b);
}
//here nothing will be printed as the value of b is not less than 10 and it will not let enter the loop and will exit

выход Программа 1:

10

выход Программа 2:

[ничего не печатается]

примечание:

вывод программы 1 и программы 2 будет одинаковым, если мы назначим a = 0 и b = 0, а также поставим a ++;и b ++;в соответствующем тексте программы.

0 голосов
/ 11 сентября 2016

В WHILE сначала проверьте условие, а затем выполните программу. В цикле DO-WHILE сначала выполните программу как минимум один раз, затем проверьте условие

0 голосов
/ 16 декабря 2014

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

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

0 голосов
/ 02 июля 2014

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

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

source: let C

0 голосов
/ 08 октября 2012
while(wdlen<2){
  ...
 }  

Если wdlen (при условии, что это переменная стека) не инициализирован или ему не присвоено значение до ввода цикла while, он будет содержать все, что было в этом пространстве в памяти до (т. Е. Мусор).Таким образом, если значение мусора <2, цикл выполняется, в противном случае это не так.</p>

do{
 ...
}while(wdlen<2)

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

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

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

Во втором случае тело цикла выполняется до первой проверки условия wdlen<2, поэтому printf / scanf выполняется хотя бы один раз.

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