2013-11-21 44 views
0

以下是C程序。逻辑运算符丢失时的评估顺序

我把它排除在别的地方,但它在if里。

#include<stdio.h> 
void main() 
{ 
    int iAge = 10; 
    int iMinAge = 1; 
    int iMaxAge = 18; 

    if(iMinAge >= iAge <= iMaxAge) 
    { 
     printf("\n in if..."); 
    } 
    else 
    { 
     printf("\n in else..."); 
    } 
} 

什么是评估顺序?

+1

http://en.wikipedia.org/wiki/Operators_in_C_and_C++#Operator_precedence – this

回答

3
iMinAge >= iAge <= iMaxAge 

相当于

(iMinAge >= iAge) <= iMaxAge 

因此

0 <= iMaxAge 

因此,它被评价为真。

2

if(iMinAge >= iAge <= iMaxAge)这在C中不起作用(不按照您预期的方式)。
如果你想测试是否iAge是在范围[iMinAgeimaxAge]

它是这样完成的:if (iAge >= iMinAge && iAge <= iMaxAge)

0

首先,关系运算符关联性是由左到右。 现在,在如果环

if(iMinAge >= iAge <= iMaxAge) 

执行自左向右按关联启动,因此第一iMinAge> = iAge进行评价时,它返回0,现在

0<=iMaxAge 

其为真(1 ),所以如果执行了内部的语句。