我们如何得到这个输出C ++

时间:2012-07-04 11:30:36

标签: c++

我有这段代码:

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

我不知道为什么会输出25 25。我真的不明白为什么它在ij中获得值25。任何人都可以解释一下为什么从第二个条件达到25的价值?这是在一个for循环中检查两个条件的问题吗?

4 个答案:

答案 0 :(得分:5)

这是comma operator的效果。这意味着它忽略测试的第一个参数,并返回第二个测试结果。

由于你在循环结束时有分号(;

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

你的for循环一直“默默地”执行(只考虑j<25条件),当它完成时,两个变量的值都是25

如果要在执行循环时查看输出以验证此操作,请从;语句的末尾删除for

如果您想根据i < 5j < 25的值终止循环,您可能希望使用&&(和)运算符。

答案 1 :(得分:0)

这是因为逗号运算符在c。

中的工作原理

i = (a,b);

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

我希望你想要达到的目标是:

i<5&&j<25

如果您希望输出为5,5

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您的意思是循环应该运行,直到i < 5j < 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。

如果你希望我是5而j是25,那么最好写两个循环或者通过以下代码。

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