golang中的if else语句

时间:2013-10-09 16:23:08

标签: if-statement go

有人可以帮我调试这个程序,只在每个输入上处理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 个答案:

答案 0 :(得分:20)

你有一个逻辑问题。

更改

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而不是所有if/else。见switch in the documentation。以下是使用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

答案 1 :(得分: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 ...

答案 2 :(得分:-1)

此代码中提供的所有if和if else语句在逻辑上都是不正确的

示例:

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

如果(100 <= x)为false,则编译器甚至不会考虑下一个条件。 这称为“短路”,即条件语句的惰性求值。

这也适用于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 :(得分:-3)

谢谢你终于得到了你的帮助。希望将来某个时候帮助别人

package main

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

      }