0

我是 C++ 的学生,我无法理解为什么这个 for 循环:

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

显示输出如下:0000011111222223333344444

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

4

6 回答 6

3

因为您不是打印j内部循环i的变量,而是外部循环的变量。否则,输出将与您预测的一样。;)

于 2013-06-02T00:22:08.383 回答
3

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

于 2013-06-02T00:22:24.080 回答
3

因为显示的变量 isi和 not ji在内循环中显示 5 次,然后在外循环中更改其值。

于 2013-06-02T00:22:38.737 回答
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...
于 2013-06-02T00:32:36.497 回答
0

如果您简单地更改,您将获得所需的输出:

cout << i << endl;

...至

cout << j << endl;

另外,关于风格,在你的for循环中考虑改变i++andj++++iand ++j。原因,从 C++ FAQ 看13.15哪个更有效:i++ 还是 ++i?

摘抄:

旧行 C 程序员习惯于编写i++而不是++i. 例如,他们会说,for (i = 0; i < 10; i++).... 由于 thisi++用作语句,而不是更大表达式的一部分,那么您可能想要使用它++i。对于对称性,我个人提倡这种风格,即使它不会提高速度,...

于 2013-06-02T01:01:01.927 回答
0

照别人说的做,如果你需要代码,你改一个字母:

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

我还将左大括号与 for 语句放在同一行,它在运行方面绝对没有区别,但我认为它看起来更干净,并且它使您的代码看起来更短。

于 2013-06-02T00:28:31.963 回答