Are*_*ski 1 stdin split scanf go
$ echo "A 1 2 3 4" | go run test.go
entire: A
next field: A
Run Code Online (Sandbox Code Playgroud)
我需要从标准输入中读取几行,例如“ A 1 2 3 4”(代码现在只占一行),并且出了点问题。Scanln应该阅读整行,并Fields用换行符分隔?为什么Scanln只读一个字?
package main
import (
"fmt"
"strings"
)
func main() {
var line string
fmt.Scanln(&line)
fmt.Println("entire: ",line)
for _,x := range strings.Fields(line) {
fmt.Println("next field: ",x)
}
}
Run Code Online (Sandbox Code Playgroud)
$ echo "A 1 2 3 4" | go run test.go
entire: A
next field: A
Run Code Online (Sandbox Code Playgroud)
你有没有尝试过:
package main
import (
"fmt"
"os"
"bufio"
"strings"
)
func main() {
var line string
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
line = scanner.Text()
fmt.Println("Got line:", line)
for _, x := range strings.Fields(line) {
fmt.Println("next field: ",x)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
$ printf "aa bb \n cc dd " | go run 1.go
Got line: aa bb
next field: aa
next field: bb
Got line: cc dd
next field: cc
next field: dd
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |