函数问题中的C ++ IF语句

时间:2017-10-27 00:46:23

标签: c++

我在使用C ++类的基本程序时遇到了一些麻烦。在下面的函数中,我已经调试并且传入的参数是正确的,但是下面的if语句为我传入的数组的第一个元素返回'F',而我传入的第二个和后面的分数是以'D'返回。

当我进行数学计算时,我的数据集应该至少触及一次if语句的每一部分,但是我猜测我的PEMDAS可能已经关闭了吗?

这是if语句:

route add ec2InstanceIP mask 255.255.255.255 AlternateNetworkgateway METRIC 10

3 个答案:

答案 0 :(得分:2)

表达式如下:

a < b < c

不符合您的想法。它实际上评估为:

(a < b) < c

其中a < b是真值,其中0表示false,1表示true。然后 值用于表达式的其余部分。

举例来说,表达式100 < 200 < 42将为真,因为100 < 200的计算结果为1,绝对小于42

相反,你应该使用类似的东西:

(a < b) && (b < c)

在任何情况下,您都可以通过以下方式清理该代码:

  1. 构造if (condition) return else ...完全没必要 - return表示只有当condition为false时才会执行其余代码,导致else多余

  2. 由于您的范围是互斥的,因此可以简化检查。换句话说,无需检查(m - (1.5*s)) <= score案例中是否D,因为如果不是这样,则代码已经返回F

  3. 目前无法获得X成绩,因为除了可能之外,没有任何分数无法获取if个陈述之一边缘情况如NaN但我会假设你并不担心。

  4. 考虑到这些要点,代码可以简化为:

    char grade(double score, double m, double s) {
        if (score < m - 1.5 * s) return 'F';
        if (score < m - 0.5 * s) return 'D';
        if (score < m + 0.5 * s) return 'C';
        if (score < m + 1.5 * s) return 'B';
        return 'A';
    }
    

答案 1 :(得分:0)

我们需要知道输入数据值才能完全理解,但正如其他人所指出的那样,比较不像C ++那样有效。

进行比较: (m - (1.5 * s))&lt; =得分&lt; (m - (0.5 * s))

这样做首先评估: (m - (1.5 * s))&lt; =得分

由于第一个if语句失败,因此总是会计算为true。在C ++中,布尔值是整数,而true通常用“1”表示(实际上它不必是,并且可以用任何非零数字表示,但我认为在这个特定情况下它被设置为1)。

然后它正在评估: 1&lt; (m - (0.5 * s))

考虑到你的“m”和“s”值,我假设总是返回true。

你应该做的是使用复合语句:

if(m - 1.5 * s&lt; =得分&amp;&amp;得分&lt; m - 0.5 * s)

(如果你愿意,可以保留括号,但由于C ++的operator precedence rules,这里不需要它们)

答案 2 :(得分:0)

只需删除所有下限比较(正如其他人所说的那样,不按照您的想法行事):如果其中任何一个不适用,您就已经返回了较低分数之一。