2017-01-15 150 views
-2

我有以下code.that演示我遇到的問題。比較怎麼沒有評估真實?這是整數和浮點比較的限制嗎?整數與浮點C++比較

#include <iostream> 

int main(){ 

    double m = -0.625; 
    if((-1)<=m<=0){ 
     std::cout << "Enter here" <<std::endl; 
    } 
    return 0; 
} 
+0

你不能鏈比較運營商一樣,在C++中,或在大多數語言。 Python是我知道的唯一允許使用的語言。 – user2357112

+0

ahhh我明白了....這可以解釋爲什麼 – Belphegor

+0

你不需要'-1'附近的括號。 –

回答

2

你不能做到像在C.它更改爲以下,它會工作三個比較:if語句

if((-1) <= m && m <= 0){ 
     std::cout << "Enter here" <<std::endl; 
    } 
0

條件在此

if((-1) <= m <= 0){ 

相當於

if((-1 <= m) < = 0){ 

as -1小於m,則子表達式(-1 <= m)產量1 C和true在C++那然後被轉換成1和子表達式1 <= 0產量0 C和false在C++ ..

要獲得期望的結果則應該寫

if(-1 <= m && m <= 0){ 
0

在C++中-1 <= m <= 0相當於(-1 <= m) <= 0

在此示例中,-1隱式轉換爲float,以便使用<=運算符和m。這個表達式的結果是bool。然後將該結果隱式轉換爲int,以便使用<=運算符與0。由於bool轉換爲01falsetrue),因此該條件語句只有在m小於-1時才爲真。

從數學的角度來看,像這樣構造if語句是有道理的,但是你必須明確地分解它,以便編譯器知道你想要什麼。

試試這個

-1 <= m && m <= 0