我使用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语句。有没有办法实现呢?
答案 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);
}
}
答案 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);
}
}
}