(C ++)For循环 - 为什么这样做?

时间:2013-06-02 00:19:28

标签: c++ for-loop

我是C ++的学生,我很难理解为什么这个循环:

for (int i=0; i<5; i++)
{
    for (int j=0; j<5; j++)
    {
        cout << i << endl;
    }
}

显示输出:0000011111222223333344444

我知道外循环在内循环完成后执行。但是,如果是这样的话,输出看起来不会像0123401234012340123401234吗?如果内循环必须先完成,为什么不具有那种模式呢?

6 个答案:

答案 0 :(得分:3)

因为你没有打印j,内循环的变量,但是i,来自外循环的变量。否则,输出将与您预测的一样。 ;)

答案 1 :(得分:3)

您正在内循环中打印i。如果您正在打印j,那么它将是0123401234012340123401234

答案 2 :(得分:3)

因为显示的变量是i而不是j,所以i在内循环中显示5次,然后在外循环中更改其值。

答案 3 :(得分:2)

  

我知道外循环在内循环完成后执行。但是,如果是这样的话,输出看起来不会像0123401234012340123401234吗?如果内循环必须先完成,为什么它没有那个模式?

不,外部for()正常执行。但是对于外部for()的每个循环,它执行整个内部for()。

Outer for(), loop 1:
  i = 0;
  Inner for(), loop 1-5:
  Print "i" (which is 0) five times. ("00000")

Outer for(), loop 2:
  i = 1;
  Inner for(), loop 1-5:
  Print "i" (which is 1) five times. ("11111")

Outer for(), loop 3: etc...

答案 4 :(得分:0)

做其他人所说的话,如果你需要代码,你改了一个字母:

for (int i=0; i<5; i++) {
    for (int j=0; j<5; j++) {
        cout << j << endl;
    }
}

我还将开括号放在与for语句相同的行上,它在运行方面完全没有区别,但我认为它看起来更干净,并且它使你的代码看起来更短。

答案 5 :(得分:0)

如果您只是更改:

,您将获得所需的输出
cout << i << endl;

...至

cout << j << endl;

另外,关于样式,请在for循环中考虑将i++j++更改为++i++j。出于这个原因,从C ++常见问题解答中可以看到13.15 Which is more efficient: i++ or ++i?

<强>摘录:

  

旧的C语言程序员习惯于编写i++而不是++i。例如。,   他们会说,for (i = 0; i < 10; i++) ....因为它使用i++作为   语句,而不是更大表达的一部分,那么你可能想要   改为使用++i。为了对称,我个人主张那种风格   即使它没有提高速度,......