我正在尝试从用户那里获取输入并打印出来,但显然距离的值是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")
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在我的主函数上尝试运行此命令时所看到的那样,fmt.Println(p.name, " is walking towards that direction in ", distance, "kilometer")即使距离的值大于,也会始终打印9.
func main() {
p := new(Person)
p.name = "Joker"
p.walking()
}
Run Code Online (Sandbox Code Playgroud)
p.walking()会一直打印距离0吗?任何人都可以向我解释这里发生了什么?
您使用了错误的格式字符串.%f用于扫描浮点数,但您的变量distance是类型int,因此您应该使用%d:
fmt.Scanf("%d", &distance)
Run Code Online (Sandbox Code Playgroud)
或者将distance变量声明为浮点数,然后您可以使用%f:
var distance float64
fmt.Println("Enter the distance")
fmt.Scanf("%f", &distance)
Run Code Online (Sandbox Code Playgroud)
注意:
fmt.Scanf()返回成功扫描的项目数和可选错误.你应该习惯于在Go中处理错误,这会节省你很多时间.
通过存储和打印返回值作为最小值Scanf():
var distance int
fmt.Println("Enter the distance")
n, err := fmt.Scanf("%f", &distance)
fmt.Println(n, err)
Run Code Online (Sandbox Code Playgroud)
打印:
0 bad verb %f for integer
Run Code Online (Sandbox Code Playgroud)
这会立即告诉您0扫描的项目并且出现了错误:bad verb %f for integer这几乎是不言自明的.
这也解释了为什么你总是看到0打印千米:你的distance变量被初始化为0(零值int)并且永远不会改变.
如果扫描成功,您会看到以下输出:
1 <nil>
Run Code Online (Sandbox Code Playgroud)
意味着一个项目被成功扫描(distance)并且没有错误.
如果您通过一次Scanf()调用扫描多个项目,n可能会比1当然更大(例如fmt.Scanf("%f %d", &distance, &temp)).
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |