我有兩個(或可能更多)的輸入行,我希望程序採取。例如。如何在golang的控制檯中結束`scanner.Scan`循環?
1 2 3 4
5 6 7 8
根據官方文檔,使用
for scanner.Scan() {
}
會導致無限線進行掃描,直到它到達EOF或錯誤,是將輸入的兩行而不是有其他的功能呢?
我有兩個(或可能更多)的輸入行,我希望程序採取。例如。如何在golang的控制檯中結束`scanner.Scan`循環?
1 2 3 4
5 6 7 8
根據官方文檔,使用
for scanner.Scan() {
}
會導致無限線進行掃描,直到它到達EOF或錯誤,是將輸入的兩行而不是有其他的功能呢?
傳統的最終用戶輸入標準輸入爲空(零長度)。例如,
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
}
難道你不能在兩行後打破循環? – kichik
如果我想要兩條以上的線,該怎麼辦? – Kevin
@Kevin使用一個計數器並隨時中斷嗎? – OneOfOne