Какой вывод выдает следующий оператор для C?
Я ожидал, что это произведет:
10 5 3 2 1
но вместо этого он печатает
10 5 3 2 1 1 1 1 1 1 1 1 1...
Зачем?
#include <stdio.h>
int main(void)
{
int i;
for(i = 10; i >= 1; i /= 2)
printf("%d ", i++);
return 0;
}
2 печатается, затем добавляется один, получая 3, делится на 2, равный 1. Поскольку 1 равен 1, 1 печатается, а затем добавляется один, делающий 2, делится на 0, поскольку 0 меньше 1, цикл должен закончиться.
3 ответа
Когда i
1, вы печатаете его с printf
заявление. затем i
увеличивается (через ++
оператор в вашем printf
заявление). затем i /= 2
выполняется, что приводит к i = 2 / 2
что приводит к 1
, Это удовлетворяет вашему условию i >= 1
, делая его бесконечным циклом.
Я продолжаю увеличиваться до 2 и делиться на 2, что создает бесконечный цикл.
Когда i /= 2
становится 1
тогда тело цикла напечатает 1
и приращение i
от 1
, Это никогда не позволит ценность i /= 2
меньше, чем 1
и, следовательно, значение i
и цикл будет повторяться бесконечно.