Почему цикл 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 из того, что я вижу.
2 ответа
однако, когда счет достигает 0, он останавливается
Это неверный вывод, он останавливается, когда count
достигает -1, и вы можете проверить его, если поместите оператор печати сразу после цикла. В этом случае он не выполняет тело цикла, но именно так работает цикл.
--
оператор, используемый после того, как переменная применяется последней. Когда счетчик равен нулю (оценивается как ложный), условие ложно, тогда оно применяется count--
(так что счетчик равен -1) и затем выйдите из цикла.
Для вашей культуры вы можете сделать --count
будет уменьшаться count
перед проверкой состояния.