Contents

go语言的bufio或者fmt包提供的Scan 和 Sscan 开头的函数,可以解决这个问题,
先记录一下Scan函数

1
2
3
4
5
6
7
8
9
10
11
package main
import "fmt"

var someting string


func main() {
fmt.Println("大兄弟,随便输入点啥吧。")
fmt.Scanln(&someting)
fmt.Printf("你输入的是 %s!\n", someting)
}

多次测试之后你会发现,Scanln 扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。

也就是说碰到换行或者空格,如果参数个数与空格或者换行数量不匹配的话,后面的会舍弃掉。

这样解决一下,巧用bufio包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import (
"fmt"
"bufio"
)

var someting string

func Scanf(a *string) {
reader := bufio.NewReader(os.Stdin)
data, _, _ := reader.ReadLine()
*a = string(data)
}

func main() {
fmt.Println("大兄弟,随便输入点啥吧。")
Scanf(&someting)
fmt.Printf("你输入的是 %s!\n", someting)
}
Contents