Do .. Хотя цикл в C #? - PullRequest
23 голосов
/ 29 марта 2010

Как мне написать цикл Do .. while в C #?

(Изменить: я программист VB.NET, пытаюсь перейти на C #, поэтому у меня есть опыт работы с синтаксисом .NET / VB. Спасибо!)

Ответы [ 8 ]

48 голосов
/ 29 марта 2010

Общая форма:

do
{
   // Body
} while (condition);

Где condition - это выражение типа bool.

Лично я редко пишу циклы do / while - for, foreach и прямые циклы while гораздо чаще встречаются в моем опыте. Последний:

while (condition)
{
    // body
}

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

7 голосов
/ 29 марта 2010

Поскольку вы упомянули, что пришли из VB.NET, я настоятельно рекомендую проверить эту ссылку , чтобы показать сравнения. Вы также можете использовать этот wensite для преобразования VB в C # и наоборот - чтобы вы могли поиграть с вашим существующим кодом VB и посмотреть, как он выглядит в C #, включая циклы и все остальное под сыном. 1005 *

Чтобы ответить на вопрос о цикле, вы просто хотите сделать что-то вроде:

while(condition)
{
   DoSomething();
}

Вы также можете сделать - пока так:

do
{
   Something();
}
while(condition);

Вот другой переводчик кода Я успешно использовал и еще один отличный C # -> VB сайт сравнения . Удачи!

6 голосов
/ 29 марта 2010
//remember, do loop will always execute at least once, a while loop may not execute at all
//because the condition is at the top
do
{
  //statements to be repeated
} while (condition);
2 голосов
/ 29 марта 2010

Довольно удивительно, что никто еще не упомянул классический пример конструкции do.. while. Если вы хотите запустить какой-то код, проверить или проверить что-то (обычно в зависимости от того, что произошло во время выполнения этого кода), а если вам не нравится результат, начните сначала. Это именно то, что вам нужно, когда вы хотите, чтобы пользовательский ввод соответствовал некоторым ограничениям:

bool CheckInput(string input) { ... }
...
string input;
...
do {
  input=Console.ReadLine();
} while(!CheckInput(input));

Это довольно общая форма: когда условие достаточно простое, обычно его помещают непосредственно в конструкцию цикла (внутри скобок после ключевого слова while), а не используют метод для его вычисления.

Ключевыми концепциями в этом использовании является то, что вы должны запросить ввод пользователя по крайней мере один раз (в лучшем случае, пользователь получит его правильно с первой попытки); и что условие не имеет особого смысла, пока тело не выполнит хотя бы один раз. Каждый из них является хорошим советом, который делает ... в то время как это инструмент для работы, оба вместе - почти гарантия.

1 голос
/ 16 сентября 2018

Ответ Джона Скита правильный и отличный, хотя я хотел бы привести пример для тех, кто не знаком с while и do-while в c #:

int i=0;
while(i<10)
{
    Console.WriteLine("Number is {0}", i);
    i++;
}

и

int i=0;
do
{
    Console.WriteLine("Number is {0}", i);
    i++;
}while(i<10)

выдаст оба:

Number is 0
Number is 1
Number is 2
Number is 3
Number is 4
Number is 5
Number is 6
Number is 7
Number is 8
Number is 9

как и следовало ожидать. Однако важно понимать, что цикл do-while всегда выполняет тело в первый раз, независимо от проверки. Это означает, что если мы изменим начальное значение i на 100, мы увидим очень разные результаты.

int i=100;
while(i<10)
{
    Console.WriteLine("Number is {0}", i);
    i++;
}

и

int i=100;
do
{
    Console.WriteLine("Number is {0}", i);
    i++;
}while(i<10)

Теперь цикл while фактически не генерирует вывод:

однако цикл do-while генерирует это:

Number is 100

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

1 голос
/ 29 марта 2010
using System;

class MainClass
{
    public static void Main()
    {
        int i = 0;
        do
        {
            Console.WriteLine("Number is {0}", i);
            i++;
        } while (i < 100);
    }
}

Другой метод будет

using System;

class MainClass
{
    public static void Main()
    {
        int i = 0;
        while(i <100)
        {
            Console.WriteLine("Number is {0}", i);
            i++;
        }
    }
}
1 голос
/ 29 марта 2010

Вот простой пример, который напечатает некоторые числа:

int i = 0;

do {
  Console.WriteLine(++i);
} while (i < 10);
0 голосов
/ 29 марта 2010

Помимо ответа Энтони Пеграма, вы можете также использовать цикл while, который проверяет условие ДО того, как попасть в цикл

while (someCriteria)
{
    if (someCondition)
    {
        someCriteria = false;
        // or you can use break;
    }
    if (ignoreJustThisIteration)
    {
        continue;
    }
}
...