2016-05-31 11 views
0

現在、私のプログラムは最初の ifステートメントを実行します。ここでは、 'w'が要件を満たしていなくても 'w'に3.5を掛けます。私が4の入力を入れると、出力は14(4 * 3.5)に変わります.3から10ポンドの間になるので実際には34(4 * 8.5)になります。修正は簡単だと確信していますが、見つけられないようです!最初の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 < 4) <= 1) 

どちら:

if (0 < w <= 1) 

を(あなたの例w = 4を使用して)あなたの現在のアプローチは次のように評価します簡略化する:

if (1 <= 1) 

trueと評価されます。 C++標準(セクション4.7、項4)によれば

:ソース・タイプがbool場合

、値falseはゼロに変換され、 true値は1に変換されます。

+1

ああ私が見る!私は '&&'の使用について完全に忘れていました。どうもありがとうございました – Gizmoh

3

if(3<w<20)間違った文です。 if(3<w&&w<20)が必要です。

2

a < w < bは、あなたが期待する効果が得られない、それは実際にa < bが真/偽の値を持つことになります(a < w) < 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; 
関連する問題