Существуют ли реальные приложения и приложения для циклов «делать пока»? [закрыто]

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

Вы видели приложения реального мира из цикла цикла do while? Каким образом такая конструкция, в вашем примере, выгодна над for или while или любые другие конструкции?

Примечание: Я не ищу гипотетические сценарии, но фактическое использование применяется в коммерческой индустрии.

6 голосов | спросил ADTC 6 Jam1000000amTue, 06 Jan 2015 06:50:16 +030015 2015, 06:50:16

5 ответов


16

Реальное приложение, считывающее данные из файла в блоках до конца файла:

do
    result = readData(buffer)
while result != EOF

Без do-while вам нужно сделать что-то вроде

result = 0   # magic value that must not be EOF
while result != EOF
    result = readData(buffer)

или

while true
    result = readData(buffer)
    if result == EOF
        break

Оба из них более уродливые, на мой взгляд.

Когда я в основном программировал на C ++, я все время использовал do-while в реальных приложениях для доставки.

ответил Steven Burnap 6 Jam1000000amTue, 06 Jan 2015 07:28:47 +030015 2015, 07:28:47
22

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

Типичным примером такого использования является интерпретатор командной строки; подсказка командной строки всегда будет отображаться хотя бы один раз.

ответил Robert Harvey 6 Jam1000000amTue, 06 Jan 2015 07:02:24 +030015 2015, 07:02:24
3
    int counter = 0;
    do {
        s = Formatter.formatWorkerId(counter++);
    } while(all.contains(s));

Находит наименьший синтаксически правильный идентификатор работника, который еще не присутствует в наборе. (Мое использование do, как правило, ограничивается этой проблемой, где вам определенно нужно генерировать значение, но самый первый тест может быть уже успешным.)

ответил Kilian Foth 6 Jam1000000amTue, 06 Jan 2015 10:22:19 +030015 2015, 10:22:19
2

@ Ответ Роберта Харви - золото, но я нахожу забавный поворот на «do ... while» и «while ... do»

В языке программирования Forth цикл был фактически разбит таким образом (вызывая псевдокод на основе кода Forth из лет, осмелюсь сказать, несколько десятилетий назад)

{
  a()
  }
 loop (expr())
{
  b()
  }

... так, чтобы a () гарантировалось выполнить хотя бы один раз, тогда это выражение было проверено, и если оно было истинным, выполните b (), а затем вернитесь к a ().

Результат: если у вас нет информации, необходимой для принятия решения о том, следует ли цитировать, то do...while может быть очень удобным .

(неуклюжая) работа - это что-то вроде

a = null
while (a == null)
  a = something()

... делает то же самое, но этот начальный a = null всегда оставляет кислый вкус во рту.

ответил Rob 6 Jam1000000amTue, 06 Jan 2015 07:14:18 +030015 2015, 07:14:18
2

Мне нравится использовать do while loop for pre-processor macros в C /C ++ без конечного ;. Если я забуду ;, компилятор остановится с ошибкой.

Пример:

#define expr(a) do { /* do something with a */ } while(false)

Обратите внимание на недостающий ; в конце строки. В вашем коде вам нужно написать

expr(a);

с точкой с запятой. В противном случае компиляция завершится неудачно.

ответил pdx9k9e9 6 Jpm1000000pmTue, 06 Jan 2015 16:23:53 +030015 2015, 16:23:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132