Как увеличить счетчик для цикла while внутри цикла?
У меня есть чувство, что я буду чувствовать себя действительно глупо здесь, но я только учусь использовать ++
а также --
увеличивать и уменьшать переменные для циклов while, и было интересно, почему этот фрагмент кода работает, а почему нет?
Неверный код:
int ctr = 0;
while (ctr < 10)
printf("%d",ctr);
ctr=ctr+1;
Плохой код выводит нули бесконечно.
Рабочий код:
int ctr=0;
while (ctr++ < 10)
printf("%d",ctr);
Идея состоит в том, чтобы вывод был 012345678910, но даже в рабочем коде он начинается с 1 и идет до 10, а не с 0. Даже если начальное значение ctr равно 0.
3 ответа
В первом случае
while (ctr < 10)
printf("%d",ctr);
ctr=ctr+1;
while
тело цикла считается только printf()
заявление. ctr=ctr+1;
не является частью тела цикла. Таким образом, у вас есть неизменная переменная в проверке состояния цикла, что делает ее бесконечным циклом.
Вам необходимо заключить оба оператора в область видимости блока, используя {}
так что оба оператора становятся частью тела цикла. Что-то вроде
while (ctr < 10) {
printf("%d",ctr);
ctr=ctr+1;
}
Сделаю.
Во втором случае
int ctr=0;
while (ctr++ < 10)
printf("%d",ctr);
ctr
уже увеличен как побочный эффект оператора приращения постфикса, в while
выражение проверки состояния. Таким образом, при печати значения уже увеличенное значение печатается.
Это действительно просто.
int ctr = 0;
while (ctr < 10)
printf("%d",ctr);
ctr=ctr+1;
В этом первом куске кода, несмотря на отступ, ваш while
вовлекает только printf("%d",ctr);
потому что нет создания блока ctr=ctr+1;
принадлежат while
,
Это может быть написано:
int ctr = 0;
while (ctr < 10)
printf("%d",ctr);
ctr=ctr+1; // This is not in the loop, even with the previous indentation.
Там нет никакого прироста к ctr
в этом цикле, а затем он будет работать вечно, печатая нули.
В этом втором куске кода
int ctr=0;
while (ctr++ < 10)
printf("%d",ctr);
вы делаете прирост ctr
каждый проход и все будет работать нормально.
Если вы хотите, чтобы первый цикл работал, напишите его так:
int ctr = 0;
while (ctr < 10) {
printf("%d",ctr);
ctr=ctr+1;
}
Сейчас ctr=ctr+1;
действительно внутри while
петля.
int ctr = 0;
while (ctr++ <= 10)
{
printf("%d",ctr-1);
}
Выход будет 012345678910
,