Как увеличить счетчик для цикла 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,

Другие вопросы по тегам