谁能告诉我为什么这个节目会无限次?

时间:2017-06-09 10:29:12

标签: c

#include< stdio.h>

int main()
{
        int n,a=0,i=1,b=11;

        while(i<=2)
        {

                while(i>0)
                {
                        a=a+b;
                        i--;
                }
                printf("%d",a);
                i++;
        }
}

但是如果我做了一点改变,我会得到输出.. 两个代码之间有什么区别?

#include< stdio.h>

int main()
{
        int n,a=0,i=1,b=11;

        while(i<=2)
        {
                n=i;

                while(n>0)
                {
                        a=a+b;
                        n--;
                }   
                printf("%d\n",a);
                i++;
        }
}

输出 - 11 33

3 个答案:

答案 0 :(得分:0)

while (i <= 2)
{
    while (i > 0)
    {
        a = a + b;
        i--;    <- out the inner while loop when i = 0
    }
    printf("%d", a);
    i++;        <- at here, the i==0 each time, so infinity loop
}

答案 1 :(得分:0)

因为嵌套循环总是将i的值恢复为0, 并且0 <= 2总是正确的,因此它继续前进。 最初i的值为1,第一个循环通过检查i&lt; = 2开始,对于i = 1是真的,然后第二个循环检查i> 0,这也是真的,然后第二个循环减小i的值由i--到0; 这次嵌套循环的测试条件失败并且内循环退出,返回第一循环,满足条件,因为i = 0是<= 2因此i递增,现在i = 1。 这一直在继续。 在第二个代码中,您将i的当前值复制到n,因此,最初i = 1; 满足第一个循环的条件,然后设置n = i, 并且检查n> 0,其为真,因为n = i = 1 在这个循环中,你递减n,n变为0,因此循环退出,外循环递增i,i现在为2允许外循环运行,然后再次n = i = 2, 内循环运行两次然后退出并且i增加到3以使外循环条件失效并因此退出循环。你得到了结果。

答案 2 :(得分:0)

在第一个代码中你的      While(i<=2)永远不会结束,因为您使用1i添加到i++,然后使用1i减去i--并且您永远不要让i=3结束while循环。