Когда вы делаете, в то время как лучший выбор по сравнению с другими типами циклов? Каковы некоторые распространенные сценарии, где его лучше, чем другие?
Я понимаю функцию do-while, но не когда ее использовать.
Когда вы делаете, в то время как лучший выбор по сравнению с другими типами циклов? Каковы некоторые распространенные сценарии, где его лучше, чем другие?
Я понимаю функцию do-while, но не когда ее использовать.
Если вам нужно что-то сделать хотя бы один раз, но не знаю, сколько раз до начала цикла.
Это не часто, что это лучшая вещь для использования, но один сценарий - это когда вы должны что-то делать хотя бы один раз, но любые дальнейшие итерации зависят от какого-либо условия.
do {
//do something
} while ( condition );
Никто еще не упомянул о его использовании в макросах C...
#define do_all(x) do{ foo(x); bar(x); baz(x); } while(0)
то в коде вы можете иметь
do_all(a);
Я использовал его раньше, если мне нужно реализовать множество условных проверок, например, обрабатывая входную форму в php. Вероятно, это не лучшая практика, но она более читаема, чем многие альтернативы:
do {
if ( field1_is_invalid ) {
$err_msg = "field1 is invalid"; break;
}
if ( field2_is_invalid ) {
$err_msg = "field2 is invalid"; break;
}
.. check half a dozen more things ..
// Only executes if all checks succeed.
do_some_updates();
} while (false)
Кроме того, я думаю, это не технически цикл. Больше похоже на способ избежать использования GOTO:)
Я обычно использую do-while, когда что-то должно произойти, но это не обязательно произойдет "правильно" в первый раз. Например:
int x;
do
{
x = random.next(100);
cout << x << endl;
} while (x != 13);
В этом случае x, с которого вы начинаете, не имеет значения, потому что он перезаписан.
Это необходимо, если вы хотите, чтобы ваше условие проверялось в конце выполнения цикла. Следовательно, цикл будет выполняться хотя бы один раз, и тогда он проверяет, следует ли продолжать итерацию.
Когда более целесообразно что-то делать, а затем оценивать логическое выражение... или, как сказал Брайан, когда вам нужно что-то сделать хотя бы один раз. Этот синтаксис перемещает оценку булевского выражения после цикла, а не перед циклом.
Всякий раз, когда то, что находится в цикле, должно выполняться хотя бы один раз.
Я давно занимаюсь этим, пока не используется на языках C, насколько это должно быть, потому что повторное использование ключевого слова "while" является неудобным и запутанным. Повтор Pascal-до тех пор, пока не будет передан ни один из ключевых слов с его структурой в начале-начале.
Мне бы хотелось когда-нибудь проанализировать большую кучу кода и посмотреть, действительно ли пока недопредставлено в коде C по сравнению с аналогичными конструкциями на других языках.
do while()
, тогда как условие true, но, с другой стороны, Pascal repeat until
выполняет цикл, когда условие false (оба будут выполняться как минимум один раз).
Когда я программирую в Паскале, я почти всегда использую repeat until
.
Когда я программирую на С++, я почти всегда использую while() {}
.
Я не могу объяснить, почему, но я чувствую это нормально. Weird?
при чтении из файла или ожидании установления соединения (другое взаимодействие с человеком), все, что число итераций неизвестно априори (например, количество записей, возвращаемых SQL-запросом), или когда вы делаете шаги разного размера (например, читайте 1 или 5 строк из файла в зависимости от последнего прочитанного) при переходе по всем комбинациям/перестановкам объектов, когда условия цикла "for" становятся громоздкими
Другое исключение, когда вы делаете что-то рекурсивное, например следующее: чтение внутренних исключений:
catch(Exception exc)
{
Exception currentException = exc;
do
{
Console.WriteLine(string.Format("{0}: {1}", currentException.GetType().Name, currentException.Message));
} while((currentException = currentException.InnerException) != null);
}