Цикл в Си работает неожиданно - PullRequest
2 голосов
/ 19 сентября 2019

В главе 6, упражнение 8 на N King C Программирование: современный подход, 2nd Edn (2008), приведен следующий код.В моем тестировании вывод показал поведение бесконечного цикла со значением 1, тогда как я думаю, что правильный вывод должен быть 10 5 3 1.

Я изменил тип переменной на float, но все еще не работает;попробовал цикл while, но все равно неправильный вывод.Также пробовал другие разные вещи, но все та же ошибка.

for (int i=10; i>=1; i/=2)
    printf("%d ",i++);
system("pause");

ожидаемый результат: 10 5 3 2 1 фактический результат: 1 1 1 1 1 1 1 ...

1 Ответ

3 голосов
/ 20 сентября 2019

Давайте проверим вывод каждой петли.Пост-инкремент и печать разделены для ясности.

Итерация цикла 1:

  • i инициализируется 10
  • print i ->печать 10
  • i++ --> i==11
  • i >=1 --> TRUE
  • i/=2 --> i==5

Итерация цикла 2:

  • print i -> print 5
  • i++ --> i==6
  • i >=1 --> TRUE
  • i/=2 --> i==3

Итерация цикла 3:

  • печать i -> печать 3
  • i++ --> i==4
  • i >=1 --> TRUE
  • i/=2 --> i==2

Итерация цикла 4:

  • печать i -> печать 2
  • i++ --> i==3
  • i >=1 --> TRUE
  • i/=2 --> i==1

Итерация цикла 5:

  • печать i -> печать 1
  • i++ --> i==2
  • i >=1 --> TRUE
  • i/=2 --> i==1

Как вы можете видеть на этом этапе, мы снова получаем значение i==1.Таким образом, этот цикл повторяется навсегда.

Как упоминалось выше @Jonathan, вы, вероятно, пропускаете первые несколько значений в непрерывном потоке 1 с позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...