对这个无限循环的逻辑感到困惑

3
这是一个无限循环的原因是什么?难道不应该当n到达5时停止循环吗?
int main()
{

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

    cout << n ;
    n++;

}

3
适当的缩进会对你有所帮助:http://coliru.stacked-crooked.com/a/f309338c53842b13 - Revolver_Ocelot
2
@Revolver_Ocelot 当我跟随链接时,我看到一个空白页面。 - 463035818_is_not_a_number
2
@tobi303 稍等片刻,由于程序的无限循环,它需要一些时间来加载。 - Garf365
1
推论:在使用 ifwhilefor 时,一定要使用花括号。一定要。虽然不这样做本身并不是一个错误,但错误也不远了。就我个人而言,我会更进一步地使用 { /* EMPTY */ },即使是对于空循环。起初可能看起来有点烦人,但它确实可以避免像这样的问题。"一个没有 {}while 循环。让我们把它们放进去... 哦哦... 发现了一个 bug。" - DevSolar
3个回答

9

在while条件后面没有花括号

这就是为什么只有cout << n; 一遍又一遍地执行。当你写while (something) doThis(); doThat();或者if (something) doThis(); doThat();时,只有 doThis()something为真时才会被执行。

如果像下面这样写:

int n=1;

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

那样就不会无限了。

3
因为你的代码相当于
int main()
{

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

}

n++ 不会被执行。


1
在您的代码中,除非控制权超出循环范围,否则n的值不会增加。这是因为n++;不是循环的一部分。这就是它变成无限循环的原因。
当有多个语句时,请使用{ }来指示代码块。
进行以下更改:
while (n <= 5) {      
   cout << n;      
   n++;    
}

在上面的代码中,n++;是循环的一部分,每次迭代n的值都会增加,最终当n为6时控制流才会退出循环。
注意:当n为5时循环不会终止。它会在n为6时终止,因为你要求循环在n<=5时运行。所以即使n为5时也会运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接