6

如果有人可以解释这一点,那将很有帮助。

int main()
{
 int a=0;
 if(a=0)
       printf("a is zero\t");
 else
       printf("a is not zero\t");
 printf("Value of a is %d\n",a);
 return 0;
}

这个的输出是

a is not zero   Value of a is 0 
4

4 回答 4

38

赋值的结果是表达式的值

所以:

if (a = 0)

是相同的:

if (0)

这与以下内容相同:

if (false)

这将强制else路径。

于 2013-07-09T05:37:31.677 回答
8
if(a=0)
       printf("a is zero\t");
 else
       printf("a is not zero\t");

这些信息恰恰是倒退的。if如果条件不为0,则执行else之后的语句,如果条件为0 ,则执行else之后的语句,所以应该是

if(a=0)
       printf("a is not zero\t");
 else
       printf("a is zero\t");

或者,等价但更清楚地,

a = 0;
if(a)
       printf("a is not zero\t");
 else
       printf("a is zero\t");

其中,与

printf("Value of a is %d\n",a);

会打印

a is zero   Value of a is 0 

正如预期的那样。

于 2013-07-09T05:47:53.987 回答
1

if () 函数接受真或假值作为参数。

因此,无论您放在括号内的任何内容对 if() 函数都没有意义,但事实上它具有什么价值。

'0' 在任何情况下都被视为错误值,因此当您将 0 作为参数传递时,例如:

if(0)
{
  ---statments---
}

的语句部分不会被执行,系统会直接跳转到else部分。

在您提到的情况下,您将 0 分配给变量并将其作为参数传递给 if()。注意 if() 只接受 0 或非 0 值。所以,你做了什么任务并不重要。if() 将接收变量 'a' 的值作为参数并采取相应的行动。

在这种情况下,由于a的值为0,if部分不会被执行,系统会跳转到else。

于 2013-07-09T13:46:32.597 回答
0

if(a=0)0变量中的赋值a。如果你想a与零进行比较,你需要像下面这样写 if(a==0)

您的条件是简单的分配,它a为零,因此条件变得错误并且您正在从else零件中获取打印件。

于 2013-07-09T05:37:50.273 回答