Каков наилучший способ повторить итерацию цикла for в C ?

#c

#c

Вопрос:

Интересно, каков наилучший способ повторить итерацию for цикла в c . Если for цикл имеет такую форму

 for(int i=0;i<some_value;i  )
 

Решение, которое я применяю для повторения одной и той же итерации, — это просто возврат i к предыдущему значению. Обычно это происходит после if инструкции и в конце добавляемого блока if i-- . Проблема в том, что вы всегда хотите изменить параметры, которые вы ставите под сомнение в if инструкции, потому что в итоге вы получите бесконечный цикл. Итак, есть ли лучший способ повторить ту же итерацию?

И я хотел бы расширить вопрос до for цикла в этой форме

 for(int j : some_other_value)
 

Как вы повторяете ту же итерацию с таким for циклом?

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

1. Это не цикл foreach . Это цикл for, основанный на диапазоне. Вы не можете повторить ту же итерацию в цикле for, основанном на диапазоне.

2. @ThomasSablik Спасибо, я отредактировал свой вопрос.

3. Повторное int i использование и some_value в ваших примерах, когда они означают совершенно разные вещи в этих контекстах, довольно запутанно.

4. @ThomasSablik Я не понимаю, что плохого в том, что в разговорной речи термин for на основе диапазона называется «циклом foreach». Это именно то, что есть.

5. for (int i ....) { work(i); if (repeat) { work(i); } } . Или даже for (int i...) { again: work(i); if (repeat) goto again; } !

Ответ №1:

Вы этого не делаете.

Если вам нужен более жесткий контроль над вашим циклом, чем просто перебор последовательности, основанный на ранжировании — for это неправильный инструмент для этой работы.

Вместо этого вернитесь к циклу на основе индекса.

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

1. @cigien Я тоже, но потом я понял, что OP также используется int i для их имени элемента, например, в диапазоне, поэтому лучше избегать 😉

2. Спасибо за ответ и хороша ли моя практика i-- внутри цикла первого типа или я мог бы использовать лучший?

3. @DaniloIvanovic Я не в восторге от этого, tbh — я бы предпочел извлечь i вступление из цикла и вместо этого использовать его как оператор (условно выполняемый) в теле. Некоторые скажут, что это простой способ получить случайный бесконечный цикл, но я не думаю, что это хуже, чем играть с индексом «странными» способами.