我在C中得到一个奇怪的输出?

时间:2011-02-13 11:19:14

标签: c programming-languages

这是一个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)

提前致谢!

6 个答案:

答案 0 :(得分:3)

您正在使用comma operator。该运算符首先计算其第一个操作数,然后将结果放在地板上并继续计算并返回其第二个操作数。

这就是为什么如果FALSE在布尔上下文中评估为num2,您的程序只会打印false(例如00.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)

  1. 了解c http://en.wikipedia.org/wiki/Comma_operator中的逗号运算符。 i =(a,b)表示在i中存储b。
  2. c中除0以外的所有内容都是真的。 所以如果(3)如果(-3)都是真的 只有当(0)为假时

答案 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)