【问题标题】:Having trouble understanding the logic of this infinite loop无法理解这个无限循环的逻辑
【发布时间】:2016-03-14 12:56:04
【问题描述】:

是什么导致了无限循环? n 不应该达到 5 并终止循环吗?

int main()
{

    int n = 1;
    while (n <= 5)

    cout << n ;
    n++;

}

【问题讨论】:

  • 适当的缩进会帮助你:coliru.stacked-crooked.com/a/f309338c53842b13
  • @Revolver_Ocelot 当我点击链接时,我看到一个空白页
  • @tobi303 稍等,程序无限循环,加载需要时间
  • 推论:总是ifwhilefor 中使用花括号。 总是。虽然不这样做并不是错误本身,但错误并不遥远。就个人而言,我更进一步并使用{ /* EMPTY */ } 甚至用于empty 循环。一开始它可能看起来很麻烦,但它完全避免了这样的问题。 “没有{}while。让我们把它们放在那里...哦...发现了一个错误。”

标签: c++ infinite-loop


【解决方案1】:

while 条件后没有大括号

这就是为什么只有cout &lt;&lt; n; 被执行一遍又一遍。当您编写while (something) doThis(); doThat();if (something) doThis(); doThat(); 时,只有doThis()something 为真时(或如果)被执行

如果是这样写的

int n=1;

while (n<=5) {
    cout << n;
    ++n;
}

那么它不会是无限的

【讨论】:

    【解决方案2】:

    因为你的代码相当于

    int main()
    {
    
        int n = 1;
        while (n <= 5)
        {
          cout << n ;
        }
        n++;
    
    }
    

    n++ 不会被执行。

    【讨论】:

      【解决方案3】:

      在您的代码中,n 的值不会增加(除非控制超出循环)。这是因为n++; 不是循环的一部分。这就是它变成无限循环的原因。

      当有多个语句时,使用{ } 表示代码块。

      进行以下更改:

      while (n <= 5) {      
         cout << n;      
         n++;    
      }
      

      在上面的代码中,n++; 是循环的一部分,n 的值随着每次迭代而递增,最后当n 为 6 时控件移出循环。

      注意:循环不会在n 为5 时终止。它在n 为6 时终止,因为您要求循环在n&lt;=5 时运行。因此,即使n 为 5,它也会运行。

      【讨论】:

        猜你喜欢
        • 2020-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多