Инструкция continue
Инструкция continue — младшая сестра break. Она заканчивает не весь цикл, а только текущую итерацию: остаток блока пропускается, и цикл сразу переходит к следующей итерации.
Этот цикл выводит числа от 1 до 10, но пропускает числа, кратные 3:
for (int number = 1; number <= 10; number++) {
if (number % 3 == 0) {
continue;
}
std::cout << number << std::endl;
}Он выводит:
1
2
4
5
7
8
10Для 3, 6 и 9 условие истинно, и continue пропускает строку с выводом. Шаг number++ всё равно выполняется, и цикл, как обычно, переходит к следующему числу.
Обычно continue стоит в начале блока и отсеивает элементы, с которыми вы не хотите иметь дело: «этот мне неинтересен, переходим к следующему». Остальная часть блока тогда занимается только интересными элементами.
Будьте осторожны с continue в цикле while. Он сразу возвращает к условию, поэтому если строка, увеличивающая счётчик, стоит ниже continue, она тоже пропускается. Счётчик перестаёт меняться, и цикл застревает. В цикле for этого случиться не может: его шаг выполняется после каждой итерации, в том числе завершённой через continue, а цикл for по диапазону сам переходит к следующему элементу.
Задание
- 1
Ваш телефон каждый день считает шаги. В векторе
dailyStepsлежат числа шагов за шесть дней, а-1означает, что в этот день телефон был выключен. Напишите циклforпоdailySteps. В начале его блока напишитеif, который с помощьюcontinueпропускает значение, если оно равно-1. - 2
После
if, по-прежнему внутри цикла, выведите значение. В выводе получится4200,6100,3800и7500, каждое в своей строке. - 3
Теперь посчитайте среднее число шагов за те дни, когда шаги измеряли. Перед циклом создайте переменные
totalиdays, обе со значением0. В цикле, подifсcontinue, добавьте значение кtotalи увеличьтеdaysна 1. После цикла выведитеtotal / daysв видеСреднее: 5400. Делите наdays, а не на размер вектора: пропущенные дни не в счёт.