Мне было интересно, не использовать ли цикл do-while, что эквивалентно для цикла или любой другой комбинации циклов в c?Эквивалент, использующий for-loop вместо do-while-loop
ответ
Любой вид цикла может быть построен из комбинации бесконечного цикла «forever» и условного оператора break
.
Например, чтобы преобразовать
do {
<action>
} while (<condition>);
к for
петли, вы можете сделать это:
for (;;) {
<action>
if (!<condition>) break;
}
Вы можете использовать один и тот же трюк, чтобы преобразовать петлю do
/while
к while
петле , например:
while (true) {
<action>
if (!<condition>) break;
}
Кроме того, петля вообще не нужна: любой из вышеперечисленных может быть смоделирован с этикеткой сверху и goto
внизу; это обычный способ создания циклов на языках ассемблера. Единственная причина, по которой три петлевые конструкции были введены в язык в первую очередь, заключалась в том, чтобы сделать язык более выразительным: петля do
/while
дает идею автора намного лучше, чем любая из альтернатив, показанных выше.
Итак, if (!
@deathshot Да, условие «нарушения» является отрицательным условием «продолжения». – dasblinkenlight
Нет другого цикла, который выполняет цикл содержимого по крайней мере один раз, как это делает do-while. Конечно, вы можете эмулировать делать-то время с флагом и время цикла:
do {
A;
} while (B)
становится
int flag=1;
while (flag || B) {
flag=0;
A;
}
, но это на самом деле не альтернатива, это просто маскирует свой первоначальный замысел.
Следующие три петли эквивалентны:
#define FALSE (0)
#define TRUE (!(FALSE))
do
{
status = getStatus();
}
while(status == TRUE);
status = TRUE;
while(status == TRUE)
{
status = getStatus();
}
for(status = TRUE; status == TRUE; status = getStatus())
{
}
'status == true'? –
@OliCharlesworth Спасибо. –
О, я действительно намекнул, что это будет идиоматично записываться как «статус», а не «status == true». –
- 1. Как использовать forLoop вместо $ .each
- 2. Android, использующий Fragment вместо активности для библиотеки
- 3. Oracle Regular Expression, использующий вместо функции INSTR
- 4. Нулевой указатель, использующий const вместо объявления переменной
- 5. PJSIP v2.5.5 Android, использующий PJSUA вместо PJSUA2
- 6. Нужна помощь с использованием ForLoop внутри ForLoop
- 7. Forloop путаница
- 8. Эквивалент C#, использующий метод WCF в JavaScript (jQuery)
- 9. Python ForLoop синтаксис
- 10. ForLoop/Array Issue
- 11. forloop внутри dplyr mutate
- 12. Оптимизация Excel для ForLoop
- 13. DalekJS - ForLoop внутри теста
- 14. Разный результат в forloop?
- 15. Строительство массива в forloop
- 16. Forloop error codeigniter
- 17. Json Data Forloop Issue
- 18. Вход для Python ForLoop
- 19. Простой forloop - Python
- 20. forloop приращение не понимая
- 21. Рефактор шаблона Django forloop
- 22. Изменение переменной в Forloop
- 23. knitr with latex forloop
- 24. NullReference в forloop
- 25. python sum function forloop
- 26. Django forloop в шаблонах
- 27. VueJS Data ForLoop Issue
- 28. Пассажир, использующий версию системы Ruby вместо Ruby от RVM
- 29. Сервер Flask-SocketIO, использующий опрос вместо веб-сайтов
- 30. Переводчик, использующий параметр локали контейнера вместо локали сеанса
Что вы думаете? Основная проблема с do-while (vs straight 'while') заключается в том, что цикл всегда выполняет итерацию хотя бы один раз. –