Я читал старый учебник по С ++, который лежал у меня под кроватью несколько лет. Читая конкретную главу, я случайно наткнулся наПродолжить«Утверждение. Я прочитал информацию в книге об этом; однако в книге было немного кратко о деталях. Я, будучи любопытным, хотел проверить утверждение продолжения, чтобы посмотреть, смогу ли я узнать больше об этом самостоятельно (хотя это может быть устаревшим теперь, мне все еще интересно, как это работает).
Я читал, что продолжить заявление «заставляет программу пропускать оставшуюся часть цикла в текущей итерации, как если бы был достигнут конец блока операторов, вызывая ее переход к началу следующей итерации — (cplusplus.com)«
С учетом сказанного, я построил эту простую программу для проверки:
#include <iostream>
int main(void) {
unsigned short int amount = 100;
unsigned short int container[5] = {amount , 0, 0, 0, 0,};
while(!(container[0]==90))
{
if(container[0]==97) continue;
std::cout << --container[0] << ", ";
}
return 0;
}
выход для этой программы есть:
99, 98, 97,
Теперь я думал, что результат будет похож на это:
99, 98 , 96 , 95, 94, 93, 92, 91, 90
Я думал, что результат будет так как продолжить заявление по определению пропустил бы 97 и перезапустил бы итерацию, выводя таким образом последовательность чисел в приведенном выше результате.
Пример в книге работает, но выполняется с для цикла. Мне было любопытно, почему он не работает с в то время как цикл так как они обе итерации. Мне просто нужно какое-то объяснение, почему это так. Спасибо всем заранее.
Как ты говоришь, continue
пропускает остальную часть тела цикла В этом случае это включает --container[0]
, поэтому его значение никогда не меняется снова.
Если бы вы использовали for
цикл, обновляя счетчик в его предложении итератора, тогда он будет вести себя так, как вы ожидаете: будет пропущена оставшаяся часть тела, но не итератор.
for (container[0] = 99; container[0] != 90; --container[0]) {
if (container[0] == 97) continue; // skip "cout", jump to "--"std::cout << container[0] << ", ";
}
// Output: 99, 98, 96, 95, 94, 93, 92, 91,
Других решений пока нет …