我写了一个程序
#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;
}
我原本期望输出为“未找到号码”,但它是“列表中找到的号码”为什么会这样
答案 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
等同于 1
,2
,{{1}之一},4
或5
“,但这不是逗号运算符的工作方式。这实际评估为6
,然后是(x)==1
,然后是2
,然后是4
,最后是5
。由于6
不是6
,因此条件的计算结果为0
,并且第一个分支被采用。
你要么需要写
true
或者,您需要使用循环:
if ( x == 1 || x == 2 || x == 4 || x == 5 || x == 6 )