这是一个c程序。我得到一个奇怪的输出。
当num1 = 10且num2 = 20->
时#include<stdio.h>
void main()
{
int num1=10,num2=20;
clrscr();
if(num1,num2)
{
printf("TRUE");
}
else
{
printf("FALSE");
}
getch();
}
输出: TRUE
当num1 = 0且num2 = 220时 输出: TRUE
但是当num1 = 0且num2 = 0时: 输出: 假 为什么会这样? 另外,下面代码的含义是什么:
if(num1,num2)
提前致谢!
答案 0 :(得分:3)
您正在使用comma operator。该运算符首先计算其第一个操作数,然后将结果放在地板上并继续计算并返回其第二个操作数。
这就是为什么如果FALSE
在布尔上下文中评估为num2
,您的程序只会打印false
(例如0
,0.0
或{{1} })。
答案 1 :(得分:2)
在:
if(num1,num2)
最后一个表达式会覆盖所有前面的表达式,因此它与:
相同if(num2)
因为,num2是0,你得到FALSE。
如果你看看这个, http://msdn.microsoft.com/en-us/library/2bxt6kc4(v=vs.71).aspx ,表示顺序评估,意味着表达式一个接一个地被评估,最后一个是你的num2。
答案 2 :(得分:2)
答案 3 :(得分:1)
if(num1,num2)
是否使用逗号运算符。逗号运算符计算第一个操作数并丢弃结果,然后丢弃第二个操作数并返回结果。因此(a, b)
计算a,计算b然后返回b。
这应该清除你对逻辑案例的困惑,在每一个案例中,语句都具有查看b值的效果。
答案 4 :(得分:0)
if(num1,num2)
不是语法错误,但它是一个逻辑错误。基本上,这将决定只是
if(num2)
仅评估最后一个变量。
答案 5 :(得分:0)
我认为你想要的是'如果a和b是真的'。像你使用的逗号意味着仅评估最后一个变量。
我认为你想要的是:
if(num1 && num2) /* num1 AND num2 */
你需要使用&amp;&amp; (逻辑AND)不是单一&amp; (这是按位AND)