0

我有这个代码:

int i = 0, j = 0;
for(i=0,j=0;i<5,j<25;i++,j++);
    cout<<i <<" "<<j;

而且我不知道它为什么输出25 25。我真的不明白为什么它在iand中获得 25 的值j。谁能解释一下为什么它从第二个条件达到 25 值?这是在一个 for 循环中检查两个条件的问题吗?

4

4 回答 4

5

这是逗号运算符的效果。这意味着它忽略测试的第一个参数并返回测试结果的第二个参数。

;由于您在循环末尾有分号 ( )

 for(i=0,j=0;i<5,j<25;i++,j++);
                              ^

您的 for 循环一直“静默”执行(仅考虑j<25条件),完成后,两个变量的值都是25.

如果您想在循环执行时查看输出以验证这一点,请;for语句末尾删除 。

如果您想根据两者的值终止循环,i < 5并且j < 25您可能想使用&&(and) 运算符。

于 2012-07-04T11:32:48.680 回答
0

这是因为逗号运算符在 c 中的工作方式。

i = (a,b);

这将分配bi. 在您的情况下i<5,j<25 j<25,它被用作检查,并且值i对循环没有影响。

我希望你想要实现的是:

i<5&&j<25

如果您期望输出为5,5.

如果要打印每次迭代的输出,请删除 for 末尾的分号。

于 2012-07-04T11:32:22.667 回答
0

,运算符是一个忽略第一个参数并返回第二个参数的运算符。因此只有第二个条件适用。你需要的是&&.

于 2012-07-04T11:32:39.710 回答
0

如果您的意思是循环应该运行直到i < 5并且j < 25为真。这是使用&&运算符的代码。

int i = 0, j = 0;
for(i=0,j=0; i<5 && j < 25; i++,j++);
cout<<i <<" "<<j;

这里 i 和 j 都是 5。

如果使用 OR( ||) 运算符,其中 i 和 j 都将是 25,因为两者都在 for 循环中递增,直到两个条件都变为 false。

如果您希望 i 为 5 而 j 为 25,最好编写两个循环或通过以下代码。

int i = 0, j = 0;
for(i=0,j=0; j < 25; j++)
{
    if( i < 5 )
    {
        i++;
    }
}
cout<<i <<" "<<j;
于 2012-07-04T11:46:48.177 回答