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, 导致无限循环,但它绝对是合法的代码没有 编译错误。
干杯, 史蒂夫
答案 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个单独的语句。我想这只是措辞问题。