-2

有人可以帮我调试这个程序吗,每个输入只处理 else 部分。这是一个为学生评分的程序。学生输入分数并显示成绩

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")
    }
}
4

4 回答 4

24

你有一个逻辑问题。

改变

if (100 <= x) && (x<=75){

if 75 <= x && x <= 100 { // numbers here are ordered from smallest to greatest

因为数字不能大于 100小于 75。

当然,其他行也是如此。

请注意,您可以减少比较。假设您最初测试该数字是否小于 100,那么您不必在测试它小于 75 之后立即测试它是否小于 75。

一个典型的 Go 代码可能会有一个switchhere 而不是 all those 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.

于 2013-10-09T16:25:55.563 回答
1

您的 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 ...

于 2013-10-09T16:26:13.890 回答
-1

此代码中提供的所有 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")
    }
于 2019-08-21T10:31:35.440 回答
-3

谢谢你终于得到了你的帮助。希望它在未来的某个时候对其他人有所帮助

包主

import "fmt"

func main(){
var x int
fmt.Println("Enter your marks")
fmt.Scanf("%d",&x)
if (75<= x) && (x<=100){
      fmt.Println("D1")
      }else if (70 <= x)&&(x <= 74){
       fmt.Println("D2")
      }else if (65 <= x )&&(x<=69){
      fmt.Println("C3")
      }else if (60 <= x)&&(x <= 64){
      fmt.Println("C4")
      }else if (55 <= x)&&(x <= 59){
      fmt.Println("C5")
      }else if (50 <= x)&&( x<= 54){
      fmt.Println("C6")
      }else if (45 <= x )&&(x<= 49){
      fmt.Println("P7")
      }else{
        fmt.Println("Work harder")
      }

      }
于 2013-10-09T16:47:50.253 回答