为什么Scanf()不适合我?

时间:2017-09-03 15:00:02

标签: go input

我试图从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)
}

1 个答案:

答案 0 :(得分:0)

对Scanf的第二次调用,Scanf("%d", x, y)仅提供一个转换说明符,但给出了两个变量。

此外,第二次调用仅传递变量的值,其地址。

似乎正确的调用是Scanf("%d %d", &x, &y)

在第一次打电话给Scanf时,你说:Scanf("%d", &input)。第二个参数的语法& variable表示命名变量的引用

input被声明为全局,但仅在声明后才可见。由于inputmain范围内,但不在<{1}}范围内,为了Scanf更改另一个范围内的值,地址必须作为论据,而不是它的价值。

地址的收件人(此处为Scanf)可以更改其仍在范围内的框架中的变量值;在这种情况下,Scanf

有关类似说明,请参阅Go的文档:https://golang.org/ref/spec#Address_operators