scanscanscan基本语法
scanfunc Scan(a ...interface{}) (n int, err error)anerr下面是一个简单的例子,演示如何从控制台中读取两个整数:
func main() {
var a, b int
fmt.Print("请输入两个整数:")
n, err := fmt.Scan(&a, &b)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b})
}Scanabscan的特性
Scan1. 忽略空格
Scanfunc main() {
var a, b, c string
fmt.Print("请输入三个字符串:")
n, err := fmt.Scan(&a, &b, &c)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c})
}hello world go2. 等待回车
Scan\nfunc main() {
var s string
fmt.Print("请输入一个字符串:")
n, err := fmt.Scan(&s)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}hello\n3. 不会读取换行符
Scan\nScan\nfunc main() {
var s string
fmt.Print("请输入一个字符串:")
n, err := fmt.Scan(&s)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}hello\nworldhello\n深入分析
ScanfmtScanfScanf1. 格式化输入
Scanffunc main() {
var a int
var b string
fmt.Print("请输入一个整数和一个字符串:")
n, err := fmt.Scanf("%d %s", &a, &b)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b})
}"%d %s"2. 自定义分隔符
ScanfScanfScanfScanStatefunc main() {
var a, b string
fmt.Print("请输入两个字符串,用逗号分隔:")
s := bufio.NewScanner(os.Stdin)
s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) {
for i := 0; i < len(data); i++ {
if data[i] == ',' {
return i + 1, data[:i], nil
}
}
return 0, data, bufio.ErrFinalToken
})
if s.Scan() {
a = s.Text()
}
if s.Scan() {
b = s.Text()
}
fmt.Printf("您输入的字符串是:%v\n", []string{a, b})
}bufioNewScannerScannerSplitab总结
ScanScan\nScanf