C 中的循环意外运行



在 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流中的前几个值。

最新更新