3 回答
TA贡献1828条经验 获得超3个赞
你有逻辑问题。
改变
if (100 <= x) && (x<=75){
至
if 75 <= x && x <= 100 { // numbers here are ordered from smallest to greatest
因为一个数字不能大于 100且小于 75。
当然,其他线路也是如此。
请注意,您可以减少比较。假设您最初测试该数字是否小于 100,那么您不必在测试它小于 75 后立即测试它是否小于 75。
一个典型的 Go 代码可能会有一个switch
here 而不是所有那些if/else
. 请参阅文档中的开关。下面是如何用 a 编写它switch
:
switch {
case x > 100:
fmt.Println("Congrats!") // you forgot this one
case x >= 75:
fmt.Println("D1")
case x >= 70:
fmt.Println("D2")
case x >= 65:
fmt.Println("C3")
case x >= 60:
fmt.Println("C4")
case x >= 55:
fmt.Println("C5")
case x >= 50:
fmt.Println("C6")
case x >= 45:
fmt.Println("P7")
default:
fmt.Println("Work harder")
}
最后评论:这种类型的切换代码很少发生,因为通常阈值和相关注释存储为数据,例如在struct.
TA贡献1757条经验 获得超8个赞
您的 IF 声明说:
if 100 is less than x (which means x has to be greater than 100)
AND
x less than (or equal to) 75
do this--
x 永远不会大于 100 且小于 75,因此它总是执行 ELSE ...
TA贡献1860条经验 获得超8个赞
此代码中提供的所有 if 和 if else 语句在逻辑上都是错误的
例子:
if (100 <= x) && (x<=75)
这里如果 (100 <= x) 为假,编译器甚至不会考虑下一个条件。这称为 SHORT CIRCUIT,条件语句的惰性求值。
这也适用于 OR 条件,即如果第一个条件为真,则不会评估第二个条件。
所以根据你写的代码,理想的解决方案是
func main() {
var x int
fmt.Println("Enter your marks")
fmt.Scanf("%d", &x)
if (100 >= x) && (x >= 75) {
fmt.Println("D1")
} else if (74 >= x) && (x >= 70) {
fmt.Println("D2")
} else if (69 >= x) && (x >= 65) {
fmt.Println("C3")
} else if (64 >= x) && (x >= 60) {
fmt.Println("C4")
} else if (59 >= x) && (x >= 55) {
fmt.Println("C5")
} else if (54 >= x) && (x >= 50) {
fmt.Println("C6")
} else if (49 >= x) && (x >= 45) {
fmt.Println("P7")
} else {
fmt.Println("Work harder")
}
- 3 回答
- 0 关注
- 209 浏览
添加回答
举报