Understanding Scanf in Go

huangapple go评论128阅读模式
英文:

Understanding Scanf in Go

问题

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

另外,我如何在函数中使用两个或更多的扫描参数(例如fmt.Scanf("%x", &e, &f, &g))?

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. var e int
  7. fmt.Scanf("%#X", &e)
  8. fmt.Println(e)
  9. }

请注意,我只会翻译代码部分,不会回答关于代码的问题。

英文:

I am not sure how to use Scanf function. Let's say I want to input number 10 on scan. By doing that, shouldn't the output be 0xA?

Also, how do I use the function with two or more scan arguments (e.g. fmt.Scanf("%x", &e, &f, &g))?

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. var e int
  7. fmt.Scanf("%#X", &e)
  8. fmt.Println(e)
  9. }

答案1

得分: 16

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. fmt.Scanf("%d", &e)
  9. fmt.Fprintf(os.Stdout, "%#X\n", e)
  10. }

输出结果为:

  1. go run main.go
  2. 10
  3. 0XA

对于多个输入:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. var s string
  9. fmt.Scanf("%d %s", &e, &s)
  10. fmt.Fprintf(os.Stdout, "%#X \t%s\n", e, s)
  11. }

输出结果为:

  1. go run main.go
  2. 10 hello
  3. 0XA hello

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

Scan可以循环读取输入:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. var f int
  9. var g int
  10. fmt.Scan(&e, &f, &g)
  11. fmt.Fprintf(os.Stdout, "%d - %d - %d", e, f, g)
  12. }

输出结果为:

  1. go run main.go
  2. 10
  3. 11
  4. 12
  5. 10 - 11 - 12

Scanf可以从格式化字符串中进行过滤:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. var f int
  9. fmt.Scanf("%d Scanf %d", &e, &f)
  10. fmt.Fprintf(os.Stdout, "%d - %d", e, f)
  11. }

输出结果为:

  1. go run main.go
  2. 10 Scanf 11
  3. 10 - 11
英文:

You have to first take your input as an int and then print the hex value :

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. fmt.Scanf("%d", &e)
  9. fmt.Fprintf(os.Stdout, "%#X\n", e)
  10. }

Output is :

  1. go run main.go
  2. 10
  3. 0XA

For multiple inputs :

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. var s string
  9. fmt.Scanf("%d %s", &e, &s)
  10. fmt.Fprintf(os.Stdout, "%#X \t%s\n", e, s)
  11. }

Output is :

  1. go run main.go
  2. 10 hello
  3. 0XA hello

Update : fmt.Scanf() vs fmt.Scan()

Scan is able to loop :

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. var f int
  9. var g int
  10. fmt.Scan(&e, &f, &g)
  11. fmt.Fprintf(os.Stdout, "%d - %d - %d", e, f, g)
  12. }

Output is :

  1. go run main.go
  2. 10
  3. 11
  4. 12
  5. 10 - 11 - 12

Scanf is able to """filter""" from a formated string :

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. var e int
  8. var f int
  9. fmt.Scanf("%d Scanf %d", &e, &f)
  10. fmt.Fprintf(os.Stdout, "%d - %d", e, f)
  11. }

Output is :

  1. go run main.go
  2. 10 Scanf 11
  3. 10 - 11

huangapple
  • 本文由 发表于 2017年5月1日 00:56:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/43708943.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定