为什么这段代码输出什么?

时间:2010-05-14 10:34:00

标签: c

考虑这个“考试”问题:

int main()
{
   int a=10,b=20;
   char x=1,y=0;
   if(a,b,x,y)
   {
      printf("EXAM");
   }
}

请让我知道为什么这根本不打印任何东西。

5 个答案:

答案 0 :(得分:11)

Comma operator - 评估第一个表达式并返回第二个表达式。因此a,b,x,y将返回存储在y中的值,即0。

答案 1 :(得分:3)

a,b,x,y的结果是y(因为逗号运算符计算其右操作数的结果),y为0,这是假的。

答案 2 :(得分:2)

逗号运算符返回最后一个语句y。由于y为零,因此if语句的计算结果为false,因此永远不会执行printf

答案 3 :(得分:1)

因为表达式a,b,x,y的计算结果为y,而0的计算结果为&&,所以永远不会执行相应的块。逗号运算符执行每个语句并返回最后一个语句的值。如果您想要逻辑连接,请使用if (a && b && x && y) { ... } 运算符:

{{1}}

答案 4 :(得分:0)

其他人已经提到过逗号运算符返回最右边的值。如果要在任何这些变量为真时打印值,请使用逻辑或:

int main()
{
   int a=10,b=20;
   char x=1,y=0;
   if(a || b || x || y)
   {
      printf("EXAM");
   }
 }

但是请注意,逗号会计算所有表达式,而运算符会在值为true时立即停止。所以用

int a = 1;
int b;
if(a || b = 1) { ... }

b具有未定义的值,而

int a = 1;
int b;
if(a, b = 1) { ... }

b将设置为1。