down123321123 2016-03-25 05:19
浏览 464
已采纳

如何结束控制台中的`scanner.Scan`循环以获取golang?

I have two (or potentially more) lines of input that I would like the program to take. eg.

1 2 3 4
5 6 7 8

According to the official doc, using

for scanner.Scan() {
}

will cause infinite lines to be scan until it reach EOF or error, are there other functions that will take two lines of input instead?

  • 写回答

3条回答 默认 最新

  • dregduc63699 2016-03-25 14:30
    关注

    It's traditional to end user input from stdin with an empty (zero length) line. For example,

    package main
    
    import (
        "bufio"
        "fmt"
        "io"
        "os"
        "strings"
    )
    
    func main() {
        snr := bufio.NewScanner(os.Stdin)
        enter := "Enter a line of data:"
        for fmt.Println(enter); snr.Scan(); fmt.Println(enter) {
            line := snr.Text()
            if len(line) == 0 {
                break
            }
            fields := strings.Fields(line)
            fmt.Printf("Fields: %q
    ", fields)
        }
        if err := snr.Err(); err != nil {
            if err != io.EOF {
                fmt.Fprintln(os.Stderr, err)
            }
        }
    }
    

    Output:

    $ go run data.go
    Enter a line of data:
    1 2 3 4
    Fields: ["1" "2" "3" "4"]
    Enter a line of data:
    5 6 7 8
    Fields: ["5" "6" "7" "8"]
    Enter a line of data:
    
    $
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用