为什么以下片段(一个使用"while"而另一个使用"for")有不同的行为?

r0a*_*ach 0 c loops for-loop while-loop

我一直在尝试一些涉及循环的基本练习.

有人能告诉我为什么以下片段有不同的输出?


而Loop

while (i<3)
{
    while(j<3)
    {
        printf("(%d %d) ",i,j);
        j++;
    }
    i++;
}
Run Code Online (Sandbox Code Playgroud)

产量

(0 0) (0 1) (0 2)

对于循环

for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
            printf("(%d %d) ",i,j);
    }
Run Code Online (Sandbox Code Playgroud)

产量

(0 0) (0 1) (0 2) (1 0) (1 1) (1 2) (2 0) (2 1) (2 2) 

他们不应该有相同的输出吗?

小智 15

尝试:

while (i<3)
{
    j = 0;
    while(j<3)
    {
        printf("(%d %d) ",i,j);
        j++;
    }
    i++;
}
Run Code Online (Sandbox Code Playgroud)

在你的代码中,发生的事情很简单 - 对于第一个循环,i = 0,j = 0,1,2,3,对于第二个i = 1,j = 3 ......

  • 在代码原样,第二个虽然从未再次激发,因为j == 3仍然.这是制作for和while的正确方法. (2认同)

Mar*_*ers 9

在while循环开始之前,您不会重新初始化变量,就像在for循环中一样.试试这个:

i = 0;
while (i<3)
{
    j = 0;
    while(j<3)
    {
        printf("(%d %d) ",i,j);
        j++;
    }
    i++;
}
Run Code Online (Sandbox Code Playgroud)


dcp*_*dcp 5

您永远不会在while循环中重新启动变量.