C++函数问题中的 IF 语句
C++ IF Statement inside a function issue
我在C++类的基本程序上遇到了一些麻烦。在下面的函数中,我已经进行了调试并且传入的参数是正确的,但是下面的 if 语句为我传入的数组的第一个元素返回"F",而我传入的第二个和此后的每个分数都返回为"D"。
当我进行数学运算时,我的数据集应该至少点击一次 if 语句的每个部分,但是我猜我的 PEMDAS 可能关闭了?
下面是 if 语句:
char grade(double score, double m, double s) {
if (score < (m - 1.5 * s)) {
return 'F';
}
if ((m - (1.5*s)) <= score < (m - (0.5 * s))) {
return 'D';
}
if ((m - (0.5 * s)) <= score < (m + (0.5 * s))) {
return 'C';
}
if ((m + (0.5 * s)) <= score < (m + (1.5 * s))) {
return 'B';
}
if ((m + (1.5 * s)) <= score) {
return 'A';
}
else {
return 'X';
}
}
表达式如下:
a < b < c
不做你认为它做的事情。它实际上评估为:
(a < b) < c
其中a < b
是一个真值,0
为假,1
为真'。然后,该值将用于表达式的其余部分。
例如,表达式100 < 200 < 42
将为真,因为100 < 200
计算结果为1
,这绝对小于42
。
相反,您应该使用类似的东西:
(a < b) && (b < c)
无论如何,您可以通过意识到以下内容来清理该代码:
构造
if (condition) return else ...
是完全不必要的 -return
意味着代码的其余部分只有在condition
为 false 时才执行,从而使else
变得多余。由于您的范围是互斥的,因此可以简化检查。换句话说,无需检查
(m - (1.5*s)) <= score
D
情况下是否为,因为如果不是这样,代码已经返回F
。目前不可能获得
X
分,因为没有分数不被if
语句之一捕获,除了可能像NaN
这样的一些边缘情况,但我假设你不担心这一点。
考虑到这些要点,代码可以简化为:
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';
}
我们需要知道输入数据值才能完全理解,但是正如其他人指出的那样,比较在C++中不起作用。
做这个比较: (米 - (1.5*秒)) <= 得分 <(米 - (0.5 * 秒))
这首先要做的是评估: (米 - (1.5*秒)) <= 分数
由于第一个 if 语句失败,这将始终计算为 true。 在C++中,布尔值是整数,true通常由"1"表示(实际上不必如此,并且可以由任何非零数表示,但我认为在这种特定情况下,它被设置为1)。
然后它评估: 1 <(米 - (0.5*秒))
我假设给定您的"m"和"s"值总是返回 true。
相反,您应该做的是使用复合语句:
if (m - 1.5*s <<p>= 得分 &&得分(如果您愿意,可以保留括号,但由于C++运算符优先级规则,此处不需要括号)
只需删除所有下限比较(正如其他人所说,不要按照您的想法进行):如果其中任何一个不适用,您已经返回了一个较低的分数。
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 需要有关此 if 语句的帮助
- 转换器练习:跳过 if 语句和 if 语句
- 避免在 C++ 中的 if 语句中递增
- 如果仍然不满足要求,如何使 if 语句重复?
- do while 循环中的 if 语句以 yes 或 no 结尾
- 为什么在此C++代码中触发此 if 语句?
- 如何基于平台在制作文件中制作if语句?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- C++ If 语句,从其他语句重复