Какой вывод выдает следующий оператор для 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 и цикл будет повторяться бесконечно.

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