0

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 小于 i”的计算结果为 0,“0 小于 10”的计算结果为 1,导致无限循环,但它绝对是没有编译器错误的合法代码。

干杯,史蒂夫

4

3 回答 3

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;

于 2014-08-25T20:27:25.147 回答
0

您的前 2 个测试用例有一个条件,这意味着 (6 < i < 10) 是合法的布尔语句, (i<10 && j<10) 也是如此,它们最终都会评估为真或假。

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

于 2014-08-25T20:09:58.810 回答
0

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

正如您所说,您编写的每个 for 循环编译时都没有任何警告/错误,因为 for 中的表达式在最后是正确的,编译器只有一个声明 (int i = 0, j = 1; 只是一个声明产生两个不同的变量),一个条件(6 < i < 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 from %dx%d\n" 后退出(每次运行 for 时,x 和 y 变量都将增加 1无论如何,第一个将为每个 x 值最多打印 5 次“Hi from %dx%x\n”,如果您想获取屏幕上每个像素或每个像素的信息,这将是正确的行为多维数组中的索引)。

于 2013-10-22T22:37:35.693 回答