我试图从Python转到GO,并且凭借我的最小知识,我试图制作一个基本的计算器。但是我出于某种原因无法让Scanf正常工作。它似乎只接受第一个scanf,但第二个被完全忽略
package main
import (
"fmt"
)
var x int
var y int
var result int
var input float64
func add(x int, y int) int {
sum := x + y
return sum
}
func sub(x int, y int) int {
sum := x - y
return sum
}
func div(x int, y int) int {
sum := x / y
return sum
}
func mul(x int, y int) int {
sum := x * y
return sum
}
func main() {
fmt.Println("Which type?\n1: Add\n2: Subtract\n3: Divide\n4:
Multiply")
fmt.Scanf("%d", &input)
fmt.Println("Input numbers seperated by space")
fmt.Scanf("%d", x, y)
switch input {
case 1:
result = add(x, y)
case 2:
result = sub(x, y)
case 3:
result = div(x, y)
case 4:
result = mul(x, y)
}
fmt.Println(result)
}
答案 0 :(得分:0)
对Scanf的第二次调用,Scanf("%d", x, y)
仅提供一个转换说明符,但给出了两个变量。
此外,第二次调用仅传递变量的值,不其地址。
似乎正确的调用是Scanf("%d %d", &x, &y)
在第一次打电话给Scanf时,你说:Scanf("%d", &input)
。第二个参数的语法& variable
表示命名变量的引用。
input
被声明为全局,但仅在声明后才可见。由于input
在main
范围内,但不在<{1}}范围内,为了Scanf
更改另一个范围内的值,地址必须作为论据,而不是它的价值。
地址的收件人(此处为Scanf
)可以更改其仍在范围内的框架中的变量值;在这种情况下,Scanf
。
有关类似说明,请参阅Go的文档:https://golang.org/ref/spec#Address_operators