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

Can multiple relational expressions be placed into the test condition of a for loop?

本文关键字:循环 for 测试 条件 表达式 关系 是否      更新时间:2023-10-16

我从Uni测验答案中得知:不能将多个关系表达式放入 for 循环的测试条件中。

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

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

和:

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

和:

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

它们都使用预期的输出进行编译和运行。

在第一个示例中,"6 小于 i"的计算结果为 0,"0 小于 10"的计算结果为 1,导致无限循环,但它绝对是合法的代码,没有编译器错误。

干杯史蒂夫

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

for(int i=1, j=1; j<5; i++,j++)
  cout << "hin";

由于没有i<10的副作用。

语句i<10, j<5;的值是 j<5; 的值。

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

正如你所说,你编写的每个 for 循环都会编译而没有任何警告/错误,因为 for 中的表达式在最后是正确的,编译器只有一个声明(int i = 0,j = 1;只是一个产生两个不同变量的声明),一个条件(6

但可能"多个关系表达式不能放入 for 循环的测试条件中"指的是更具体的东西,如下所示:

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

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

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

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

你的前 2 个测试用例你有一个条件,这意味着 (6

因此,在这些情况下,您显然使用了一个语句。然而,你的第三个测试用例变得有点有趣。I<10,J<5写成两个陈述。它似乎被评估为 ((i<10) ||(j<5)),这是一个单一的陈述。但是,您编写它的方式确实表明您正在使用 2 个单独的语句。我想这只是措辞问题。