我有这段代码:
int i = 0, j = 0;
for(i=0,j=0;i<5,j<25;i++,j++);
cout<<i <<" "<<j;
我不知道为什么会输出25 25
。我真的不明白为什么它在i
和j
中获得值25。任何人都可以解释一下为什么从第二个条件达到25的价值?这是在一个for循环中检查两个条件的问题吗?
答案 0 :(得分:5)
这是comma operator的效果。这意味着它忽略测试的第一个参数,并返回第二个测试结果。
由于你在循环结束时有分号(;
)
for(i=0,j=0;i<5,j<25;i++,j++);
^
你的for循环一直“默默地”执行(只考虑j<25
条件),当它完成时,两个变量的值都是25
。
如果要在执行循环时查看输出以验证此操作,请从;
语句的末尾删除for
。
如果您想根据i < 5
和j < 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 < 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。
如果你希望我是5而j是25,那么最好写两个循环或者通过以下代码。
int i = 0, j = 0;
for(i=0,j=0; j < 25; j++)
{
if( i < 5 )
{
i++;
}
}
cout<<i <<" "<<j;