Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何结束golang控制台中的“scanner.Scan”循环?_Go - Fatal编程技术网

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

如何结束golang控制台中的“scanner.Scan”循环?,go,Go,我有两行(或可能更多)的输入,我想让程序接受。例如 1 2 3 4 5 6 7 8 根据官方文件,使用 for scanner.Scan() { } 将导致无限行被扫描,直到达到EOF或error,是否有其他功能将代替两行输入?传统上,终端用户从stdin输入一条空(零长度)行。比如说, package main import ( "bufio" "fmt" "io" "os" "strings" ) func main() { snr :

我有两行(或可能更多)的输入,我想让程序接受。例如

1 2 3 4
5 6 7 8
根据官方文件,使用

for scanner.Scan() {
}

将导致无限行被扫描,直到达到EOF或error,是否有其他功能将代替两行输入?

传统上,终端用户从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:

$

要求用户按“CTRL+D”,这会从终端发出EOF信号,您的上述代码应该可以正常工作,不会有任何更改。

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

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
   }

使用ctl+z结束scanner.Scan()

难道你不能在两行之后中断循环吗?如果我想要超过两行怎么办?@Kevin使用计数器并随时中断?我不知道你在问什么。使用相同的方法,您可以在任意行数后中断。如果我不知道用户输入了多少行,如何使用计数器?在windows 10 cmd Prompt中失败我正在寻找的答案@这一点非常清楚,在从文件中导入Stdin的上下文中对我有所帮助。不过,我想知道,在请求用户输入时,是否会导致扫描命中
EOF
?我想这是一种安全的方法,因为即使它从未发生过,处理它也不会有任何伤害?答案应该是通过编程实现的