bufio.NewScanner作为函数参数

时间:2018-02-06 03:35:36

标签: go

我有这段代码:

var scanner = bufio.NewScanner(os.Stdin)

func readInt() int {
    scanner.Scan()
    ans, _ := strconv.Atoi(scanner.Text())
    return ans
}

func main() {
    scanner.Split(bufio.ScanWords)

    n := readInt()

    fmt.Println(n)
}

现在,scanner变量是全局变量。我想将其设置为本地并将其作为参数传递给readInt()函数。当我尝试这种方式时它不起作用:

func readInt(scanner bufio.NewScanner) int {
    scanner.Scan()
    ans, _ := strconv.Atoi(scanner.Text())
    return ans
}

func main() {
    var scanner = bufio.NewScanner(os.Stdin)
    scanner.Split(bufio.ScanWords)

    n := readInt(scanner)

    fmt.Println(n)
}

如果有人可以伸出援助之手。

1 个答案:

答案 0 :(得分:5)

bufio.NewScanner是用于创建新扫描仪的功能:

  

func NewScanner(r io.Reader) *Scanner
  NewScanner返回一个新的Scanner来从r读取。拆分功能默认为ScanLines。

不是可以在函数签名中使用的类型。但是,bufio.NewScanner会返回*bufio.Scanner,而bufio.Scanner是一种类型,您可以这么说:

func readInt(scanner *bufio.Scanner) int {
    //...
}