为什么这段代码没有任何输出?

4
考虑以下“EXAM”问题:
int main()
{
   int a=10,b=20;
   char x=1,y=0;
   if(a,b,x,y)
   {
      printf("EXAM");
   }
}

请告诉我为什么这段代码完全没有输出任何内容。

1
嗨Gollum,见到你在这里我很惊讶。无论如何,对于我来说输出不是“Printed Nothing”,我也没有看到一个C问题的输出... - sbi
5个回答

11

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


3
< p > a,b,x,y 的结果是 y (因为逗号运算符的结果是其右操作数),而且 y 为0,即为假。


2
逗号运算符返回最后一个语句,即y。由于y是零,if语句的值为false,因此printf不会被执行。

1

因为表达式a,b,x,y的值为y,而y的值为0,所以相应的代码块永远不会被执行。逗号运算符执行每个语句并返回最后一个语句的值。如果你想要逻辑连接,使用&&运算符:

if (a && b && x && y) { ... }

0

其他人已经提到逗号操作符返回最右边的值。如果你希望在这些变量中任何一个为真时打印出该值,请使用逻辑或运算符:

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

但是请注意,逗号会评估所有表达式,而或运算符一旦有一个值为真就停止。因此,使用

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

b的值未定义,而使用

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

b将被设置为1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接