gpt4 book ai didi

input - 为什么scanf的输入总是0?

转载 作者:IT王子 更新时间:2023-10-29 02:27:51 24 4
gpt4 key购买 nike

我正在尝试从用户那里获取输入并将其打印出来,但在我进行了一些输入之后,距离的值显然是 0

代码如下:

type Person struct {
name string
age int
ambition string
}

func (p *Person) walking() {
var distance int
fmt.Println("Enter the distance")
fmt.Scanf("%f", &distance)

if distance < 9 {
fmt.Println(p.name, " is walking towards that direction in ", distance,
"kilometer")
} else {
fmt.Println("This is an error, ignore this")
}
}

如您所见,每当我尝试在我的主函数上运行此命令时,它总是打印 fmt.Println(p.name, "is walking towards that direction in ", distance, "kilometer") 即使 distance 的值大于 9

func main() {
p := new(Person)
p.name = "Joker"

p.walking()
}

p.walking() 总是将距离打印为 0?谁能给我解释一下这是怎么回事?

最佳答案

您使用了错误的格式字符串。 %f用于扫描 float ,但是你的变量distanceint类型的,所以你应该使用%d:

fmt.Scanf("%d", &distance)

或者声明distance变量为 float ,然后就可以使用%f:

var distance float64
fmt.Println("Enter the distance")
fmt.Scanf("%f", &distance)

注意:

fmt.Scanf()返回成功扫描的项目数,以及一个可选的错误。您应该习惯于在 Go 中处理错误,这会节省您很多时间。

通过存储和打印 Scanf() 的返回值作为最小值:

var distance int
fmt.Println("Enter the distance")
n, err := fmt.Scanf("%f", &distance)
fmt.Println(n, err)

打印:

0 bad verb %f for integer

这会立即告诉您扫描了 0 个项目并且出现错误:bad verb %f for integer 这几乎是不言自明的。

这也解释了为什么您总是看到打印出 0 公里:您的 distance 变量被初始化为 0(int 的零值) 并且它永远不会改变。

如果扫描成功,您将看到以下输出:

1 <nil>

表示成功扫描了一项(距离)并且没有错误。

如果您要通过一次 Scanf() 调用扫描多个项目,n 当然可以大于 1(例如 fmt.Scanf("%f %d", &distance, &temp)).

关于input - 为什么scanf的输入总是0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31914711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com