#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(;;) { }
Комментариев нет:
Отправить комментарий