程序只执行第一个IF语句

时间:2016-05-31 23:41:34

标签: c++ if-statement

我目前遇到的问题是我的程序只执行第一个程序 如果声明,它会倍增' w'到3.5,即使' w'不符合要求。如果我输入4,输出变成14(4 * 3.5),它应该是34(4 * 8.5),因为重量在3到10磅之间。我确定修复很简单,但我似乎无法找到它!

#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 个答案:

答案 0 :(得分:3)

if(3<w<20)是一个错误的陈述。你应该有if(3<w&&w<20)

答案 1 :(得分: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将转换为一个。

答案 2 :(得分: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;