如何更改此循环以不使用继续?

时间:2011-04-21 07:58:10

标签: c++

我使用continue语句来创建这个简单的程序并获得所需的输出。

for(m=1;m<=3;m++)
{
   for(n=1;n<=2;n++)
   {
      if(m==n)
         continue;
      cout<<m<<" "<<n<<endl;
   }
}

输出:

1  2
2  1
3  1
3  2

现在我想要它而不使用coninue语句。有没有办法实现呢?

7 个答案:

答案 0 :(得分:5)

简单:

if (m != n) {
  cout<<m<<" "<<n<<endl;
}

答案 1 :(得分:4)

我的解决方案更简单。它甚至不使用if

for(int m=1;m<=3;m++)
{
  for(int n=1;n<=2;n++)
  {
      m != n && (cout<<m<<" "<<n<<endl);
  }
}

输出:

1 2
2 1
3 1
3 2

演示:http://www.ideone.com/rMSuK

请注意,我不会在生产代码中执行此操作,但对于此特定问题,将其视为一个谜题,有时可以玩得开心,玩C ++如何工作。 :d

答案 2 :(得分:4)

使用回调的另一种解决方案:

void print(int m, int n)
{
  cout<<m<<" "<<n<<endl;
}
void noprint(int m, int n)
{ 
}

typedef void (*fn)(int,int);
fn calls[] = {noprint,print};
for(int m=1;m<=3;m++)
{
   for(int n=1;n<=2;n++)
   {
        calls[m!=n](m,n);
   }
}

在线演示:http://www.ideone.com/jLStA

答案 3 :(得分:1)

if (m != n)
{
  cout<...
}

.......需要更多角色......该死的

答案 4 :(得分:1)

像这样(我可以自由地缩进你的代码并在适当的地方使用std::):

for (m = 1; m <= 3; m++) {
    for (n = 1; n <= 2; n++) {
        if (m != n) {
            std::cout << m << " " << n << "\n";
        }
    }
}

答案 5 :(得分:0)

这是一个不需要if的解决方案:

for (int m = 1; m <= 3; ++m)
{
    for (int n = 1; n < m; ++n)
    {
        std::cout << m << " " << n << std::endl;
    }
    for (int n = m + 1; n <= 2; ++n)
    {
        std::cout << m << " " << n << std::endl;
    }
}

正如您所看到的,我只是跳过m而不在迭代中包含它:)

答案 6 :(得分:0)

简单地反转条件并将其余代码放入其中。

当您使用C#标记问题时,这是C#代码:

for(int m = 1; m <= 3; m++) {
  for(int n = 1; n <= 2; n++) {
    if (m != n) {
      Console.WriteLine("{0} {1}", m, n);
    }
  }
}