使用逗号运算符的意外输出

时间:2015-10-06 16:54:14

标签: c if-statement

我写了一个程序

#include<stdio.h>
int main()
{
      int x=3;
       if((x)==1,2,4,5,6)
               printf("number found in the list\n");
       else
               printf("Number not found \n");

      return 0;
}

我原本期望输出为“未找到号码”,但它是“列表中找到的号码”为什么会这样

2 个答案:

答案 0 :(得分:5)

==运算符的优先级高于,,因此if子句的计算结果为

if (((x) == 1),2,4,5,6)

自上次&#34;元素以来总是如此&#34;逗号运算符&#34;计数&#34; (6)。

来自C11标准:

  

逗号运算符的左操作数被评估为void   表达[...]。然后评估右操作数; 结果   有其类型和价值

答案 1 :(得分:2)

您希望(x) == 1,2,4,5,6被评估为“x等同于 12,{{1}之一},45“,但这不是逗号运算符的工作方式。这实际评估为6,然后是(x)==1,然后是2,然后是4,最后是5。由于6不是6,因此条件的计算结果为0,并且第一个分支被采用。

你要么需要写

true

或者,您需要使用循环:

if ( x == 1 || x == 2 || x == 4 || x == 5 || x == 6 )