我有两行(或更多)输入,希望程序能够接受。例如:
1 2 3 4
5 6 7 8
According to the official doc, using
for scanner.Scan() {
}
如果使用这种方法,程序将会扫描无限行,直到遇到文件结束或错误。是否有其他函数可以只读取两行输入?
我有两行(或更多)输入,希望程序能够接受。例如:
1 2 3 4
5 6 7 8
According to the official doc, using
for scanner.Scan() {
}
如果使用这种方法,程序将会扫描无限行,直到遇到文件结束或错误。是否有其他函数可以只读取两行输入?
在从标准输入(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()