理解Go中的Scanf函数

7

我不确定如何使用Scanf函数。假设我想在扫描时输入数字10。那么输出结果不应该是0xA吗?

另外,如果我要使用带有两个或更多扫描参数的函数(例如fmt.Scanf("%x", &e, &f, &g)),该怎么做呢?

package main

import (
    "fmt"
)

func main() {

    var e int

    fmt.Scanf("%#X", &e)
    fmt.Println(e)

}
1个回答

16

您需要先将输入作为整数处理,然后打印十六进制值:

package main

import (
    "fmt"
    "os"
)

func main() {

    var e int

    fmt.Scanf("%d", &e)
    fmt.Fprintf(os.Stdout, "%#X\n", e)

}

输出结果为:

go run main.go 
10
0XA

对于多个输入:

package main

import (
    "fmt"
    "os"
)

func main() {

    var e int
    var s string

    fmt.Scanf("%d %s", &e, &s)
    fmt.Fprintf(os.Stdout, "%#X \t%s\n", e, s)

}

输出为:
go run main.go
10 hello
0XA     hello

更新:fmt.Scanf() vs fmt.Scan()

Scan 可以循环:

package main

import (
    "fmt"
    "os"
)

func main() {

    var e int
    var f int
    var g int

    fmt.Scan(&e, &f, &g)
    fmt.Fprintf(os.Stdout, "%d - %d - %d", e, f, g)
}

输出结果为:
go run main.go
10
11
12
10 - 11 - 12

Scanf 能够从格式化的字符串中过滤出需要的内容:

package main

import (
    "fmt"
    "os"
)

func main() {

    var e int
    var f int

    fmt.Scanf("%d Scanf %d", &e, &f)
    fmt.Fprintf(os.Stdout, "%d - %d", e, f)
}

输出结果为:
go run main.go 
10 Scanf 11
10 - 11

4
ScanfScan有什么区别?这听起来很琐碎,但我有点困惑。如果Scanf中的格式是%d smth %s,那么“smth”似乎没有任何作用。 - dodo254

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接