在 N King 的第 6 章练习 8 中 C Programming: A Modern Approach, 2nd Edn (2008(,给出了以下代码。在我的测试中,输出显示值为 1 的无限循环行为,而我认为正确的输出应该是 10 5 3 1。
我将变量类型更改为浮点数但仍然不起作用;尝试了一段时间循环,但仍然是错误的输出。还尝试了其他不同的事情,但仍然是相同的错误。
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:
i
初始化为 10- 打印
i
-->打印 10 i++ --> i==11
i >=1 --> TRUE
i/=2 --> i==5
循环迭代 2:
- 打印
i
-->打印 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
流中的前几个值。