Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Замена бесконечного цикла

#cpp #циклы


Можно ли заменить следующий бесконечный цикл на обычный цикл? Слышал, что всегда
можно, но не понимаю как.

while (true) {
    if (c1(a)) {
        a = f1(a);
    }

    if (c2(a)) {
        break;
    }

    a = f2(a);
}


Здесь f1, f2 - функции, возвращающие какое-то значение, зависящее от a, c1, c2 -
условия (функции, возвращающие bool), зависящие от a.

upd:

под обычным я понимаю без break, continue, goto и прочих хаков, а чтобы условие было
не постоянным/пустым
    


Ответы

Ответ 1



Заменить можно так do { if (c1(a)) { a = f1(a); } cond = !c2(a); if (cond) a = f2(a); } while (cond); но в данном случае бесконечный цикл нагляднее

Ответ 2



Например можно так. Но я бы не сказал что это улучшит читабельность. for (;!c2(a=!c1(a)?:f1(a));a=f2(a)); Внезапный код-гольф?

Ответ 3



Если вы хотите for (обычный) - то можно просто for(;;) { if (c1(a)) { a = f1(a); } if (c2(a)) { break; } a = f2(a); } Или for(;;a = f2(a)) { if (c1(a)) a = f1(a); if (c2(a)) break; } Мне кажется, что так понятнее всего.

Ответ 4



Если захотите, то можно ещё использовать Go to, но это не советуется использовать. Главное не забывайте, что нужно условие выхода, оно делается через if() { } Самым практичным является while (true) { Тело } Либо for(;;) { }

Комментариев нет:

Отправить комментарий