2010-09-20 150 views
60

如何使用Go中的fmt.Scanf函数从标准输入中获取整数输入?从标准输入读取整数

如果这不能使用fmt.Scanf来完成,那么读取单个整数的最佳方法是什么?

回答

97

http://golang.org/pkg/fmt/#Scanf

所有在围棋中包含的库是有据可查的。

话虽这么说,我相信

func main() { 
    var i int 
    _, err := fmt.Scanf("%d", &i) 
} 

开了窍

+0

fmt.Scanf花了大约一分钟,扫描1个百万个整数。 – 2013-06-06 23:36:55

+0

@robertking尝试使用bufio而不是这是一个简单的例子。 – cthom06 2013-06-07 00:05:20

+0

干杯。 Bufio很快。 – 2013-06-07 01:02:29

37

的替代方案,可以多一点简洁是只使用fmt.Scan

package main 

import "fmt" 

func main() { 
    var i int 
    fmt.Scan(&i) 
    fmt.Println("read number", i, "from stdin") 
} 

它使用反思发现如何解析输入的参数类型。

http://golang.org/pkg/fmt/#Scan

+14

你不应该这样做,而不检查错误;) – kyrias 2013-04-13 16:26:34

3

这里是读书正整数我的 “快速IO” 的方法。它可以通过移位并预先布置内存来改善。

package main 

import (
    "io/ioutil" 
    "bufio" 
    "os" 
    "strconv" 
) 


func main() { 
    out := bufio.NewWriter(os.Stdout) 
    ints := getInts() 
    var T int64 
    T, ints = ints[0], ints[1:] 
    .. 
    out.WriteString(strconv.Itoa(my_num) + "\n") 
    out.Flush() 
    } 
} 

func getInts() []int64 { 
    //assumes POSITIVE INTEGERS. Check v for '-' if you have negative. 
    var buf []byte 
    buf, _ = ioutil.ReadAll(os.Stdin) 
    var ints []int64 
    num := int64(0) 
    found := false 
    for _, v := range buf { 
     if '0' <= v && v <= '9' { 
      num = 10*num + int64(v - '0') //could use bitshifting here. 
      found = true 
     } else if found { 
      ints = append(ints, num) 
      found = false 
      num = 0 
     } 
    } 
    if found { 
     ints = append(ints, num) 
     found = false 
     num = 0 
    } 
    return ints 
} 
1

Golang fmt.Scan比Golang fmt.Scanf(比锵scanf函数简单)

如果fmt.Scan错误,即如果不为零简单,登录&回报

1读单变量:

import (
    "fmt" 
    "log" 
) 

var i int 
if _, err := fmt.Scan(&i); err != nil { 
    log.Print(" Scan for i failed, due to ", err) 
    return 
} 

fmt.Println(i) 

2读取多个变量:

import (
    "fmt" 
    "log" 
) 

var i, j, k int 
if _, err := fmt.Scan(&i, &j, &k); err != nil { 
    log.Print(" Scan for i, j & k failed, due to ", err) 
    return 
} 

fmt.Println(i, j, k) 

最好的运气

来自实例:http://www.sortedinf.com/?q=golang-in-1-hour