Мне было интересно, вместо использования цикла do-while, что эквивалентно циклу for или любой другой комбинации циклов в c?
Эквивалент использования цикла for вместо цикла do-while
Ответы (3)
Любой цикл может быть создан из комбинации бесконечного цикла «навсегда» и условного оператора break
.
Например, для преобразования
do {
<action>
} while (<condition>);
для цикла for
вы можете сделать это:
for (;;) {
<action>
if (!<condition>) break;
}
Вы можете использовать тот же трюк, чтобы преобразовать цикл do
/while
в цикл while
, например:
while (true) {
<action>
if (!<condition>) break;
}
Более того, цикл вообще не нужен: любое из вышеперечисленных можно смоделировать с меткой вверху и goto
внизу; это распространенный способ выполнения циклов в языках ассемблера. Единственная причина, по которой три циклические конструкции были введены в язык, заключалась в том, чтобы сделать язык более выразительным: цикл do
/while
намного лучше реализует идею автора, чем любая из показанных выше альтернатив.
Нет другого цикла, который бы выполнял содержимое цикла хотя бы один раз, как это делает do-while. Конечно, вы можете эмулировать do-while с помощью флага и цикла 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
, а не status == true
.
- person Oliver Charlesworth; 23.12.2013
while(status)
.
- person Fiddling Bits; 23.12.2013
status = TRUE;
(а не true
) для назначения перед тем как?
- person Rich; 07.05.2015
while
) заключается в том, что цикл всегда повторяется хотя бы один раз. - person Hot Licks   schedule 23.12.2013