Я думаю, вам сначала нужно точно знать, что такое count--
. Это означает, что первый count
будет оцениваться как часть условия, а затем уменьшен. Это означает, что count--
в этом случае 0
, что делает условие цикла цикла равным 0
. После того, как условие оценивается, count
- -1
, но это не имеет значения, поскольку счет был равен 0
во время проверки условия, поэтому цикл никогда не запускается.
for(count = 0;count--;count--)
{
printf("\n%5d", count);
}
На следующий цикл начинается отсчет на 1
, что означает count--
будет оцениваться с 1
, это делает проверку состояния для цикла, равного 1
. После оценки счет становится 0
. Это означает, что цикл for будет вводить и распечатывать сообщение. Когда кодовый блок заканчивается, выполняется инструкция count--
, устанавливая count
- -1
. Затем мы снова проверяем. Мы видим, что count--
оценивает -1
, поэтому мы снова зацикливаемся. После оценки count
будет установлен на -2
, и мы снова войдем в цикл for. Эта функция работает вечно, потому что счетчик всегда будет нечетным, когда мы перейдем к проверке цикла цикла, поэтому счет никогда не может быть 0
, и мы никогда не прерываем цикл.
for(count = 1;count--;count--)
{
printf("\n%5d", count);
}
Теперь вы должны быть в состоянии понять, почему последний работает только один раз:
for(count=2 ;count--;count--)
{
printf("\n%5d", count);
}
Очевидно после первого evalution, count
получает убавления. Затем, как только блок кода будет выполнен, он будет уменьшен снова. Поэтому, когда мы получаем условную проверку в цикле for, count
- 0
, и мы ломаемся.
Прочтите эту статью: http://www.thegeekstuff.com/2012/12/c-loops-examples/ и вернитесь к нам, если у вас появилось больше вопросов после прочтения. – Cristik