package main
import "fmt"
func main() {
var age int
fmt.Scanf("%d", &age)
// Code your switch or if...else-if statement here.
switch age {
case 1:
age <= 14
fmt.Println("Toy Story 4")
case 2:
age <= 18
fmt.Println("The Matrix")
case 3:
age <= 25
fmt.Println("John Wick")
case 4:
age <= 35
fmt.Println("Constantine")
case 5:
age > 35
fmt.Println("Speed")
default:
fmt.Println("Error: Unknown age")
}
}
我在 IDE 中得到一個黃色標記,用于scanf標記未處理的錯誤。此外,所有案例都將第一行標記為紅色,以防止編譯。我得到的錯誤是age <= 14 is evaluated, but not used。所有陳述句都是如此。我在網上搜索并查看了示例,據我所知,代碼是,如材料和示例所述。這是 Go Land (JetBrains) 的截圖:
有人有想法嗎?另外,如果您回答,請記住,這是 Go 課程的一課,我必須使用 scanf。我可以將開關更改為 else if,這可能會解決問題,但我有點好奇,為什么會發生這種情況以及如何解決。:)
uj5u.com熱心網友回復:
age <= 14不是有效的 Go 運算式,盡管它可以用作其中的一部分。Go 非常講究所有被消費的值。
這不是case用<=運算子撰寫 a 的正確方法。
switch age {
case 1:
age <= 14
fmt.Println("Toy Story 4")
...
}
如果 的值為 ,age則該情況匹配1。你想使用這樣的開關樣式:
switch {
case age <= 14:
fmt.Println("Toy Story 4")
case age <= 18:
...
...
}
uj5u.com熱心網友回復:
補充一下 Daniel 寫的內容——基本上 switch 陳述句(除非它是一個型別 switch 但我們不要離題)有兩種形式:
switch { // note the absense of any expression here
case bool_expr_1:
...
case bool_expr_2:
...
和
switch any_expr {
case value_to_match_1:
...
case value_to_match_2:
...
在第一種形式中,每個case分支中的運算式從上到下計算,第一個計算結果為true“獲勝”——即執行該分支中的代碼。
在第二種形式中,運算式被評估以產生一個值,然后與每個 case 分支中的值進行精確比較。
您已嘗試將兩種形式結合起來,但這是行不通的。
您可能認為 case 分支中的這些數字是檢查分支的順序,但不,不是這樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/388883.html
