циклы — C ++

Я читал старый учебник по С ++, который лежал у меня под кроватью несколько лет. Читая конкретную главу, я случайно наткнулся наПродолжить«Утверждение. Я прочитал информацию в книге об этом; однако в книге было немного кратко о деталях. Я, будучи любопытным, хотел проверить утверждение продолжения, чтобы посмотреть, смогу ли я узнать больше об этом самостоятельно (хотя это может быть устаревшим теперь, мне все еще интересно, как это работает).

Я читал, что продолжить заявление «заставляет программу пропускать оставшуюся часть цикла в текущей итерации, как если бы был достигнут конец блока операторов, вызывая ее переход к началу следующей итерации — (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 и перезапустил бы итерацию, выводя таким образом последовательность чисел в приведенном выше результате.

Пример в книге работает, но выполняется с для цикла. Мне было любопытно, почему он не работает с в то время как цикл так как они обе итерации. Мне просто нужно какое-то объяснение, почему это так. Спасибо всем заранее.

2

Решение

Как ты говоришь, 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,
8

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector