Почему цикл while останавливается на 0 в этом коде?

#include <stdio.h>

/* function declaration */
void func(void);

static int count = 5; /* global variable */

main() {

while(count--) {
func();
}

return 0;
}

/* function definition */
void func( void ) {

static int i = 5; /* local static variable */
i++;

printf("i is %d and count is %d\n", i, count);
}

Я смотрю на цикл while, и нет никаких причин, почему он должен останавливаться на 0, однако, когда счет достигает 0, он останавливается. Я пытаюсь установить счетчик как 0 и использую — и он пошел на -1, поэтому нет причин, почему это должно быть остановлено на 0 из того, что я вижу.

-1

Решение

однако, когда счет достигает 0, он останавливается

Это неверный вывод, он останавливается, когда count достигает -1, и вы можете проверить его, если поместите оператор печати сразу после цикла. В этом случае он не выполняет тело цикла, но именно так работает цикл.

1

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

-- оператор, используемый после того, как переменная применяется последней. Когда счетчик равен нулю (оценивается как ложный), условие ложно, тогда оно применяется count-- (так что счетчик равен -1) и затем выйдите из цикла.

Для вашей культуры вы можете сделать --countбудет уменьшаться count перед проверкой состояния.

0

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