2016-05-31 44 views
0

我目前有一個問題,即我的程序只執行第一個 if語句,它將'w'乘以3.5,即使'w'不符合要求。如果我把4的輸入,輸出變成14(4 * 3.5),它應該真的是34(4 * 8.5),因爲重量在3到10磅之間。我確信修復很簡單,但我似乎無法找到它!程序只執行第一條IF語句

#include <iostream> 
using namespace std; 

int main() 
{ 
float w, price; 
cout << "Enter weight of package : "; 
cin >> w; 

if (0 < w <= 1) 
{ 
    price = 3.5 * w; 
} 
else if (1 < w <= 3) 
{ 
    price = 5.5 * w; 
} 
else if (3 < w <= 10) 
{ 
    price = 8.5 * w; 
} 
else if (10 < w <= 20) 
{ 
    price = 10.5 * w; 
} 
else if (20 < w <= 30) 
{ 
    price = 12.5 * w; 
} 
else if (30 < w) 
{ 
    cout << "The package cannot be shipped" << endl; 
} 
else 
    cout << "Invalid input" << endl; 
cout << "Weight : " << w << " lbs" << endl; 
cout << "Shipping cost : $" << price << endl; 
} 

回答

3

你可能打算用:

if (0 < w && w <= 1) 

相反的:

if (0 < w <= 1) 

您當前的方法(使用您的例子w = 4)的計算結果是這樣的:

if ((0 < 4) <= 1) 

哪簡化爲:

if (1 <= 1) 

其中評估結果爲true

根據C++標準(4.7節,第4章):

如果源類型是bool,值false被轉換到零和 值true被轉換爲一個。

+1

啊我明白了!我已經完全忘記了使用'&&',以及我的方法會如何解釋。非常感謝你 – Gizmoh

3

if(3<w<20)是錯誤的說法。你應該有if(3<w&&w<20)

2

a < w < b不會產生你所期望的效果,但實際上結果爲(a < w) < b),其中a < b將有一個真/假值。我建議像這樣重寫你的代碼:

if (w <= 0) 
{ 
    cout << "Invalid input" << endl; 
} 
else if (w <= 1) 
{ 
    price = 3.5 * w; 
} 
else if (w <= 3) 
{ 
    price = 5.5 * w; 
} 
else if (w <= 10) 
{ 
    price = 8.5 * w; 
} 
else if (w <= 20) 
{ 
    price = 10.5 * w; 
} 
else if (w <= 30) 
{ 
    price = 12.5 * w; 
} 
else 
{ 
    cout << "The package cannot be shipped" << endl; 
} 

cout << "Weight : " << w << " lbs" << endl;