#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
答案 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)
永远不会结束,因为您使用1
将i
添加到i++
,然后使用1
从i
减去i--
并且您永远不要让i=3
结束while循环。