perl — возврат к началу цикла без проверки условия

Программируя на Perl, мы можем использовать умную функцию с именем ‘redo’ — мы можем вернуться к началу цикла, не глядя на условие. Это полезно, когда, например, мы создаем таблицу, в которой мы должны установить ожидаемые значения / символы (например, «a-b-c», ничего больше).
Я хотел бы спросить, существуют ли в C ++ такие функции. Буду благодарен за вашу помощь.

1

Решение

Для возврата к началу цикла не существует ключевого слова redo, но нет причины, по которой вы не смогли бы сделать это goto, (О, я чувствую себя так грязно, рекомендую goto…)

int tries = 0;
for(int i=0; i<10; ++i) {
loop_start:
bool ok = ((i+tries)%3==0);
if(ok) {
++tries;
goto loop_start;
}
}
5

Другие решения

Я думаю, что более разумное решение

int trie=0;
for(int i=0; i<10; i++) {
while((i+tries)%3==0 {
++tries;
}
}
3

Если вы хотите избежать goto любой ценой,

int tries = 0;
for (int i=0; i<10; ++i) {do{

bool redo = ((i+tries)%3 == 0);

if (redo) { ++tries; }
else      { break; }

} while(1); }
1

Почему вы не можете использовать простой while цикл?

auto is_okay = [](char x) { return x=='a' || x=='b'; };
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x;
while(!is_okay(x=obtain_new_character()));  // get new x until it's okay
C[i]=x;
}

Или, что эквивалентно, do while петля

container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x;
do {
x=obtain_new_character();
} while(x!='a' && x!='b');
C[i]=x;
}

Или даже for петля

container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x=0;
for(; x!='a' && a!='b'; x=obtain_new_character());
C[i]=x;
}
1
По вопросам рекламы [email protected]