更多关于for循环

时间:2013-12-14 19:08:40

标签: c for-loop

我正在测试一些代码,这是我发现的一件奇怪的事情:

#include<stdio.h>
void main()
{int m,n;
  for(m=0, n=0; m<0,n<4; m++,n++)
  printf("hello\n");
 }

我的猜测是它不会打印,因为条件m<0不满意。但我对此感到震惊:

输出

hello
hello
hello
hello

任何人都可以解释这个结果。为什么没有评估m<0条件?

4 个答案:

答案 0 :(得分:3)

在C(和许多其他语言)中,逗号运算符是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回第二个操作数的结果。

所以cond1, cond2评估这两个条件,但仅cond2很重要。

如果您希望满足这两个条件,请使用cond1 && cond2。 所以

for(m=0, n=0; m<0 && n<4; m++,n++)

答案 1 :(得分:2)

你的意思是m < 0 && n < 4

,运算符采用两个表达式,执行它们(即潜在的副作用),但计算 second 表达式的结果。因此m < 0, n < 4评估m < 0(没有副作用,因此也可能不存在),丢弃值false,然后返回n < 4

答案 2 :(得分:1)

它会被评估,但逗号运算符,将放弃条件m<0的效果。

答案 3 :(得分:1)

表达式m<0确实得到了评​​估,但由于comma operator,其结果被丢弃,下一个表达式n<4的结果用于for - 相反。

如前所述:表达式m < 0 && n < 4也将评估两个子表达式,但只有当它们都为真时才返回true。