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 回复

嗨!为什么会是错的呢?这是正确的 🙂

更多关于Golang代码为什么输出错误结果的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


很好。你自己解决了那个问题。 我能知道那本书的名字吗?

因为书上说输出应该是 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)
}

感谢帮助。

Go 吉祥物

开始学习 - Go 编程语言

Go 标志

官方页面正在监听中

图片

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变量前添加了一个感叹号(!),以便根据ageminor变量正确打印出你是否是成年人。

这段代码的输出结果是正确的,但可能不符合你的预期。问题在于逻辑判断和变量命名的混淆。

问题分析:

  1. var minor = age < 18 这行代码创建了一个布尔变量 minor
  2. age = 41 时,41 < 18 的结果是 false
  3. 所以 minor 的值是 false,表示"不是未成年人"
  4. 但在输出时,你使用了 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(未成年人)被用来表示"是否是成年人"的结果,这在逻辑上是相反的。代码本身没有错误,但语义不清晰。

回到顶部