为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
Helenr 2021-12-27 16:08:33
我希望程序采用两行(或可能更多行)输入。例如。1 2 3 45 6 7 8根据官方文档,使用for scanner.Scan() {}会导致扫描无限行,直到达到 EOF 或错误,是否还有其他函数需要两行输入?
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

使用空(零长度)行从 stdin 结束用户输入是传统的做法。例如,


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\n", fields)

    }

    if err := snr.Err(); err != nil {

        if err != io.EOF {

            fmt.Fprintln(os.Stderr, err)

        }

    }

}

输出:


$ 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:


$


查看完整回答
反对 回复 2021-12-27
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

要求用户按“CTRL + D”,从终端发出 EOF 信号,你上面的代码应该没有任何变化。


查看完整回答
反对 回复 2021-12-27
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

一种方法是验证扫描仪是否已到达文件末尾。


var s scanner.Scanner


   file, _ := os.Open("file.go") // return io.Reader


   s.Init(file) // needs io.Reader


   var character rune

   character = s.Scan()


   for character != scanner.EOF {

    // here your code

   }


查看完整回答
反对 回复 2021-12-27
  • 3 回答
  • 0 关注
  • 606 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号