【问题标题】:Why is the for loop turning into an infinite loop?为什么for循环会变成无限循环?
【发布时间】:2017-09-21 08:40:00
【问题描述】:

为什么下面的代码会导致死循环?

#include <stdio.h>
void main()
{
  int i;
  for(i=0;i!=12;i++)
  {
    printf("%d\n",i);
    i=12;
  }
}

【问题讨论】:

  • i++ 在循环结束时被执行,所以我将成为i=13
  • 问问自己 (12+1) == 12 是否永远正确。
  • 因为在执行循环操作i++ 之后,您设置i=12,而不是使用i++ 递增它,然后执行新的迭代来检查i!=12 是否存在。我推荐你,如果您不完全知道程序在做什么,请使用调试器找出它在做什么。

标签: c for-loop infinite


【解决方案1】:

i++ 在循环结束时被执行,所以i 将变为13

【讨论】:

    【解决方案2】:

    因为i 永远不会等于12 当它被循环检查时。在每次循环迭代后执行i++,因此i 在检查时始终等于13

    您可以完全省略i++ 部分,或者设置i = 11; 来完成同样的事情。 (当然,由于在这种情况下“相同的事情”只需要循环的单次迭代,所以你实际上并不需要一个循环。但我认为这只是一个人为的学习练习。)

    【讨论】:

      【解决方案3】:

      这是因为for 循环在检查循环条件之前增加了变量。

      这是将for 循环重写为while 循环的代码:

      #include<stdio.h>
       void main()
      {
        int i;
        i=0;
        while(i!=12)
        {
           printf("%d\n",i);
           i=12;
           i++;
        }
      }
      

      这是它的输出(前几行):

      0
      13
      13
      13
      ...
      

      每次循环,代码将i 设置为12,然后在检查条件并重新启动循环之前立即将其递增到13。循环只会在i==12 时终止,因此它将永远运行。

      【讨论】:

        猜你喜欢
        • 2015-12-24
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        相关资源
        最近更新 更多