2013-10-09 72 views
-2

有人可以幫我調試這個程序,只有其他部分在每個輸入上處理。 這是一個給學生分級的程序。學生輸入一個標記並顯示分數如果有其他意見lang

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

回答

17

您有一個邏輯問題。

變化

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

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

,因爲數量不能超過75

小大於100 而且這對於其他行一樣課程。

請注意,您可以減少比較。假設你測試的數字是否最初小於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

+2

爾加! '常量<=變量&&變量<=常量'是令人困惑的。 –

+2

@BilltheLizard比較的形式反映了數學符號'75 <= x <= 100',在這種情況下'75 <= x && x <= 100'很有意義。沒有所有不必要的括號,它看起來好多了! –

+0

@ NickCraig-Wood我同意用這種方式寫出來更有意義,但我的眼睛不習慣,所以我的大腦沒有正確解析它。 :) –

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

-3

Thankx在您的幫助finaly了。希望它可以幫助別人一些時間在未來

包主要

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

     } 
+2

正如另一條評論所寫。不要在同一個if子句中混合常量<=變量'和變量<=常量'。正如你所看到的那樣,它使得代碼更不可讀。 – topskip