可以将多个关系表达式放入for循环的测试条件中吗?

时间:2013-10-22 11:47:51

标签: c++ for-loop expression conditional-statements

Uni Quiz Answers告诉我: 多个关系表达式不能放入for循环的测试条件中。

我已遵守并运行以下代码:

int main()
{
    for(int i=1;6<i<10;i++)
        cout << "hi\n";
    cin.get();
    return 0;
}

int main()
{
    for(int i=1, j=1; i<10 && j<10; i++,j+=i)
        cout << "hi\n";
    cin.get();
    return 0;
}

int main()
{
    for(int i=1, j=1; i<10, j<5; i++,j++)
        cout << "hi\n";
    cin.get();
    return 0;
}

它们都以预期的输出编译和运行。

在第一个例子中,“6 lessthan i”评估为0,“0 thansthan i”评估为1, 导致无限循环,但它绝对是合法的代码没有 编译错误。

干杯, 史蒂夫

3 个答案:

答案 0 :(得分:1)

该行

for(int i=1, j=1; i<10, j<5; i++,j++)
  cout << "hi\n";

相同
for(int i=1, j=1; j<5; i++,j++)
  cout << "hi\n";

由于i<10没有副作用。

声明i<10, j<5;的值是j<5;的值。

答案 1 :(得分:0)

如果我完全理解这个问题,我根本不确定,所以如果错了,请忽略答案;)

正如你所说的,你编写的每个for循环都没有任何警告/错误编译,因为for内部的表达式是正确的,因为编译器只有一个声明(int i = 0,j = 1 ;只是一个产生两个不同变量的声明),一个条件(6&lt; i&lt; 10将产生无限循环)等等......

但可能是'多个关系表达式无法置于for循环的测试条件中。指的是更具体的东西:

for(int x = 0; x < 5; x ++)
{
    for(int y = 0; y < 5; y ++)
    {
        printf("Hi from %dx%d\n", x, y);
    }
}

这次消息“Hi from%dx%d \ n”将显示25次,在这种情况下,代码不能只在一个'for'循环中写入,如您所见。例如,如果x和y变量在屏幕中像素的位置,那么运行

for(int x = 0, y = 0; x < 5 && y < 5; x++, y ++)
{
    printf("Hi from %dx%d\n", x, y);
}

不会做你期望它做的事,因为'for'循环将在打印5“Hi来自%dx%d \ n”后退出(每次运行for时,x和y变量将是无论如何,第一个将为每个x值打印5次“Hi from%dx%x \ n”,最多为5,如果你想获得屏幕上每个像素的信息,这将是正确的行为或多维数组中的每个索引。)

答案 2 :(得分:0)

你的前两个测试用例你有一个条件,意思是(6&lt; i&lt; 10)是一个合法的布尔语句,因此(i&lt; 10&amp; j&lt; 10&lt; 10&lt; 10&lt; 10&lt; 10&lt; 10&lt; 10&lt; 10&gt;或者是假的。

因此,在这些情况下,您显然正在使用一个声明。然而,您的第三个测试用例非常有趣。 i&lt; 10,j&lt; 5被写为两个陈述。看起来它被评估为((i <10)||(j <5)),这是单个陈述。但是,您编写的方式是建议您使用2个单独的语句。我想这只是措辞问题。