在嵌套for循环

时间:2017-12-11 12:13:03

标签: c++ loops for-loop nested initialization

我试图重写以下代码

int i1=0,i2=1;
while(i1<5)
{
   i1++;
   i2=0;
   while(++i2!=i1)
      cout << "x";
   cout <<"\n";
}

使用两个嵌套的for循环。

我最初想过

int j1,j2;
for(j1=0;j1<5;j1++)
{
  for(j2=0;++j2!=j1;)
     cout << "x"; 
  cout <<"\n"; 
} 

但这会导致崩溃。移动内部j++循环内的for可以改为

int j1,j2;
for(j1=0;j1<5;)
{
   for(j2=0,j1++;++j2!=j1;)
      cout << "x"; 
   cout <<"\n"; 
} 

但我真的不明白将j1增量放在第一个for循环中是怎么回事,因为j1应该是内部的常量for循环。那么在内部for

中声明它的目的是什么呢?

我可以给出的唯一可能的合理解释是,在内部for循环的测试条件中,++j2!=j1,有一个j1,这意味着{必须在j1循环内初始化{1}} for的方式相同(即使j2为常量且j1不同)。这可能是原因吗?

3 个答案:

答案 0 :(得分:1)

你的第一个例子&#34;崩溃&#34; (它是一个无限循环)是因为你使用了后增量(j ++)和预增量(++ j)。

假设您有这个变量:int number = 1;。如果你写了

int answer = 5 + number++;
cout << answer;

它将输出6,因为当您使用后增量时,它会使用该行代码的变量的当前值,然后为该变量添加一个。

int answer = 5 + ++number;
cout << answer;

这将输出7,因为预增量会为变量添加一个,然后THEN在计算中使用该新值。

第一个示例变为无限循环的原因是第一次循环j10。然后,您可以在第二个循环中执行此操作:for(j2=0;++j2!=j1;)

因为您在第二个循环中使用了预增量,j21处起作用。 1 != 0,因此它会循环播放,第二次j2 2,依此类推。 j2永远不会等于j1,因为j10j2每次循环时都会不断加1。

答案 1 :(得分:0)

      for(j2=0;++j2!=j1;)
      cout << "x"; 

在这里创建无限循环。 j2永远不会等于j1来弯曲循环

在第二个例子中,由于j1 ++的值增加,你将跳过第一次迭代

     for ( j2 = 0, j1++; ++j2 != j1;)
     cout << "x";

答案 2 :(得分:0)

假设:

int i1=0,i2=1;
while(i1<5)
{
   i1++;
   i2=0;
   while(++i2!=i1)
      cout << i1 << "," << i2;
   cout <<"\n";
}

我认为对嵌套for循环的最简单转换如下:

for(int i1=1; i1<=5; ++i1){
   for (int i2=1; i2!=i1;++i2){
       cout << "x";
   }
   cout << "\n";
}

Here你可以看到它们产生相同的输出。