c ++&&条件从未执行过

时间:2016-02-02 01:36:16

标签: c++ conditional

我正在尝试为分配计算远程呼叫费率的分配创建一个程序,该程序会考虑呼叫的开始时间和长度,并输出总成本和净成本。 涉及到几个参数,我已经在条件语句中实现了

  • 任何在下午6:00(1800)或之后开始但在上午8:00(800)之前开始的电话会被打折50%。

  • 所有来电均需缴纳4%的联邦税。

  • 常规费率为每分钟0.35美元。

  • 任何超过60分钟的通话都会获得16%的费用折扣(扣除任何其他折扣后但加税前)。

然而,第一个条件代码永远不会执行,我已经尝试了几个不同的操作数,但仍然没有想到它。

#import <iostream>


using namespace std;

int main() {

//declare variables
int startTime;
int callLength;
double grossCost = 0;
double netCost;
const double callRate = 0.35;
const double fedTax = 0.04;
const double discount1 = 0.50;
const double discount2 = 0.16;


//begin user prompt
cout << "Enter start time: " << endl;
cin >> startTime;
cout << "Enter length of call in minutes: " << endl;
cin >> callLength;

//define our grossCost
grossCost = (callLength * callRate);

//lez do some conditionals
    if ((startTime >= 1800) && (startTime <= 800)){

        netCost = grossCost - (grossCost * discount1);
        netCost *= fedTax;
    }

    else if (callLength > 60){
        netCost = grossCost - (grossCost * discount2);
        netCost *= fedTax;
    }
    else{
        netCost = (grossCost * fedTax);
    }

    //print out our final costs
    cout << "gross cost : " << "$" << grossCost << endl;
    cout << "net cost: " << "$" << netCost << endl;

    return 0;

    }

所以,当尝试输入:

Enter start time: 2322
Enter length of call in minutes: 67
gross cost : $23.45
net cost: $0.78792

netcost未正确评估,因为它正在跳过第一个条件,即使startTime的值符合参数。 输出应为:

    Enter start time: 2322
    Enter length of call in minutes: 67    
    gross cost: $23.45
    net cost: $10.24 

我不是在找人做我的作业,只是指示一些方向引导我朝着正确的方向前进,我已经多次超过条件而且我仍然对为什么不进行评估感到困惑。感谢任何帮助。谢谢。

4 个答案:

答案 0 :(得分:4)

这里有一个逻辑错误:一个数字不能大于或等于1800 同时小于或等于800。修改第一个条件。我会分两部分打破它

if((time >= 1800 & <=2400) || (time >= 0 && time <= 800))

这里的实际逻辑错误是在晚上6点之后调用 而在8AM之前 将在不同的日子里调用!因此,我们确实需要两个条件来检查日期的界限,并结合起来。

@Reto Koradi每条评论的编辑:

如果省略边界检查,结果不会改变。如上所述,改变的要点是突出两个条件的相互排斥性,这是通过将&&换成||来实现的:

if (time >= 1800 || time <= 800)

答案 1 :(得分:2)

问题是

if ((startTime >= 1800) && (startTime <= 800)){

这两个条件是相互排斥的。没有大于1800的数字,同时小于800.你可能想要修正这样的比较条件(由于iksemyonov的评论,对未来的读者有所改进。请参考他对同一问题的回答)

if ((startTime >= 1800) || (startTime <= 800)){

答案 2 :(得分:2)

为什么它不起作用的解释是相当明显的,并已在其他答案中涵盖。这个表达式永远不会成立,因为没有数字大于1800且小于800。

if ((startTime >= 1800) && (startTime <= 800)){

&&运算符测试两个条件是否为真。

更有趣的部分是为什么人们犯了这个错误。当你开始使用逻辑表达式时,你既不是第一个也不是最后一个陷入这个陷阱的人。

我认为原因在于,在自然语言中,我们使用“和”这个词与逻辑运算符非常不同。当你说“早上8点之前和下午6点之后”时,“和”更多地与“联合”设置操作相对应。你基本上定义了一个包含“上午8点之前的所有时间”和“下午6点之后的所有时间”的集合,这是一个集合联盟。

与“union”设置操作匹配的逻辑运算符是逻辑“或”。至少有一个输入集中的任何元素都是union的一部分。因此,对于两个集合的并集,union是第一组中第二组元素的集合。

理解了这一点,正确的条件是:

if ((startTime >= 1800) || (startTime <= 800)){

其中||是逻辑“或”运算符。

逻辑操作的工作方式与日常用语的使用方式不同并不罕见。因此,在将语言转换为逻辑表达式时,您始终需要小心。另一个流行的例子是,自然语言中的“或”主要对应于排他性或,而“或”运算符是包含性的。因此,如果有人告诉你“你可以接受或离开它”,这意味着你必须决定,而标准的逻辑“或”运算符实际上允许你同时做到这两点。

答案 3 :(得分:1)

x怎么样&gt; 1800和x&lt; 800在同一时间是真的吗?如果第一个为真,则该语句将始终为false。