2013-11-21 66 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 ),所以如果執行了內部的語句。