main()
{
int i=0,j=0;
while(i<5,j<10)
{
i++;
j++;
}
printf("%d,%d,",i,j);
}
输出:10,10
int main(){
int x=2,y=2;
while(x<=5,y<=3)
printf("%d %d ",++x, ++y);
return 0;
}
输出:3 3 4 4
在第一个代码中,输出如何以10,10
的形式出现?任何人都可以解释,但第二个代码的输出是3344
,是否都运行在不同的逻辑上?
答案 0 :(得分:5)
在正好的情况下,您正在使用逗号运算符。
逗号运算符可以评估所有操作数,但会将结果抛弃,除了最后一个。
您的时间等同于以下内容:
while(j<10)
{
i++;
j++;
}
答案 1 :(得分:4)
问题是你在while
循环中使用逗号运算符而不是逻辑和。表达式i<5,j<10
表示:执行语句i<5
但抛弃结果,然后执行语句j<10
,这将是整个表达式的结果。因此,最后第一部分不会用作while
条件的检查。在第二种情况下它的不同之处在于你的陈述的顺序。
你的意思是:
while(i<5 && j<10)
// do your stuff
现在两个条件必须成立。
答案 2 :(得分:1)
你用c ++而不是python-perl编码,这个:
while(x<=5,y<=3)
相当于while (y <= 3)
请使用像&amp;&amp ;;这样的布尔运算符或||
while(x<=5 && y<=3)
答案 3 :(得分:1)
在此代码段i<5,j<10
中,您使用的是built-in comma operator。您需要使用的是logical and:&&
或and
,如下所示:
while (i < 5 and j < 10)
内置的逗号运算符计算所有操作数并抛出除最后一个之外的所有操作数。
第二个代码起作用的原因是因为y
的限制低于x
的限制,y
上的条件是while循环中的停止条件。因此,y
上的条件正确地停止了循环,因为while (x <= 5, y <= 3)
等同于while (y <= 3)
。
答案 4 :(得分:1)
在C中,由逗号,
分隔的表达式从左到右(至少在gcc上)和整个表达式e的值进行求值:
e = e1, e2, .. , en;
与en
相同。因此,所有表达式e1,...,en-1都被丢弃。因此,它们仅用于产生副作用或宏。因此i<5, j<10
基本上只是j<10
而在第二种情况下相同。它只是while(y<=3)
,因为x<=5, y<=3
总是评估为y<=3
。
答案 5 :(得分:1)
人们建议他使用&&
运算符,但他想要解释为什么他从示例1中获取10 10
并从示例2中获得3 3 4 4
。
是的,两种逻辑都不同。在示例1中,while
循环从0到9迭代,在第10个值处退出(希望您了解逗号运算符如何从所有答案中工作)。这就是为10 10
和i
打印j
的原因。在例2中,它从2个预增量开始,值3得到条件为真。它再次循环,j=4
失败并打印3 3 4 4
个值。希望它有帮助:)
答案 6 :(得分:0)
将while
循环更改为:
while(i<5 && j<10)
{
i++;
j++;
}
因为你希望两个条件都是真的。现在你正在使用comma operator,它评估所有的操作数,但只保留最后的结果。