Golang代码为什么输出错误结果
Golang代码为什么输出错误结果
package main
import (
"fmt"
)
func main() {
fmt.Println(" There is a sign at the entrance that says ‘Adults Only.’ ")
var age = 41
var minor = age < 18
fmt.Printf("Am I an adult at %v? %v\n", age, minor)
}
输出: 入口处有一个写着“仅限成人”的标牌。 我41岁算成年人吗? false
8 回复
很好。你自己解决了那个问题。 我能知道那本书的名字吗?
因为书上说输出应该是 true 所以那本书是错的吗?我是这么认为的。
我总是通过 var minor bool 格式或 minor := age < 18 来定义变量。
func main() {
fmt.Println("hello world")
}
好的,我找到了问题所在,是波兰语翻译错了。
原始代码:
package main
import "fmt"
func main() {
fmt.Println("There is a sign near the entrance that reads 'No Minors'.")
var age = 41
var minor = age < 18
fmt.Printf("At age %v, am I a minor? %v\n", age, minor)
}
感谢帮助。
GhostCorw:
package main import ( "fmt" ) func main() { fmt.Println(" There is a sign at the entrance that says ‘Adults Only.’ ") var age = 41 var minor = age < 18 fmt.Printf("Am I an adult at %v? %v\n", age, minor) }输出: There is a sign at the entrance that says ‘Adults Only’. Am I an adult at 41? false
你的代码看起来没问题,但看起来你可能在import语句周围使用了错误的引号。在Go语言中,你应该使用双引号(")而不是智能引号(“ ”)。这是你代码的修正版本:
package main
import (
"fmt"
)
func main() {
fmt.Println("There is a sign at the entrance that says 'Adults Only.'")
var age = 41
var minor = age < 18
fmt.Printf("Am I an adult at %v? %v\n", age, !minor)
}
这应该会给出预期的输出:
There is a sign at the entrance that says 'Adults Only.'
Am I an adult at 41? true
请注意,我还在fmt.Printf()调用中的minor变量前添加了一个感叹号(!),以便根据age和minor变量正确打印出你是否是成年人。
这段代码的输出结果是正确的,但可能不符合你的预期。问题在于逻辑判断和变量命名的混淆。
问题分析:
var minor = age < 18这行代码创建了一个布尔变量minor- 当
age = 41时,41 < 18的结果是false - 所以
minor的值是false,表示"不是未成年人" - 但在输出时,你使用了
minor变量来回答"是否是成年人"的问题,这造成了语义上的混淆
修正后的代码:
package main
import (
"fmt"
)
func main() {
fmt.Println("入口处有一个写着'仅限成人'的标牌。")
var age = 41
var isAdult = age >= 18 // 明确判断是否是成年人
fmt.Printf("我%d岁算成年人吗? %v\n", age, isAdult)
}
或者更清晰的版本:
package main
import (
"fmt"
)
func main() {
fmt.Println("入口处有一个写着'仅限成人'的标牌。")
var age = 41
// 使用明确的变量名
var isMinor = age < 18
var isAdult = !isMinor // 成年人就是不是未成年人
fmt.Printf("年龄:%d岁\n", age)
fmt.Printf("是未成年人吗? %v\n", isMinor)
fmt.Printf("是成年人吗? %v\n", isAdult)
}
输出:
入口处有一个写着'仅限成人'的标牌。
年龄:41岁
是未成年人吗? false
是成年人吗? true
问题的本质是变量名 minor(未成年人)被用来表示"是否是成年人"的结果,这在逻辑上是相反的。代码本身没有错误,但语义不清晰。



