go语言fmt包之获取输入
Go语言fmt
包下有fmt.Scan
、fmt.Scanf
、fmt.Scanln
三个函数,可以在程序运行过程中从标准输入获取用户的输入。
1、fit.Scan()
函数定签名如下:
func Scan(a ...interface{}) (n int, err error)
- Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
- 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。
package main
import "fmt"
func main() {
fmt.Print("name>>:")
var (
name string
age int
)
_,err1 :=fmt.Scan(&name)
if err1!=nil{
fmt.Println(err1)
return
}
fmt.Print("age>>:")
_,err:=fmt.Scan(&age)
if err!=nil{
fmt.Println(err)
return
}
fmt.Printf("扫描结果 name:%s age:%d \n", name, age)
}
`
name>>:bob
age>>:11
扫描结果 name:bob age:11
`
2、fmt.Scanf()
函数签名如下:
func Scanf(format string, a ...interface{}) (n int, err error)
- Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
- 本函数返回成功扫描的数据个数和遇到的任何错误。
func main(){
var name string
var age int
//n, err := fmt.Sscanf("Kim is 22 years old", "%s is %d years old", &name, &age)
n,err := fmt.Scanf("name>:%s age>>:%d",&name,&age)
if err != nil {
panic(err)
}
fmt.Printf("%d: %s, %d\n", n, name, age)
}
`name>:bob age>>:22
2: bob, 22`
//需要按name>:%s age>>:%d的格式输入
fmt.Scanf
不同于fmt.Scan
简单的以空格作为输入数据的分隔符,fmt.Scanf
为输入数据指定了具体的输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。
3、fmt.Scanln()
遇到回车就结束扫描了,这个比较常用。
函数签名如下:
func Scanln(a ...interface{}) (n int, err error)
- Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
- 本函数返回成功扫描的数据个数和遇到的任何错误。
func main(){
var name string
var age int
fmt.Print("name>>:")
_,err := fmt.Scanln(&name)
fmt.Print("age>>:")
n,err1 := fmt.Scanln(&age)
if err != nil {
panic(err)
}
if err1 != nil {
panic(err)
}
fmt.Printf("扫描结果%d: %s, %d\n", n, name, age)
}
`
name>>:q
age>>:1
扫描结果1: q, 1`
3、Sscan系列
这几个函数功能分别类似于fmt.Scan
、fmt.Scanf
、fmt.Scanln
三个函数,只不过它们不是从标准输入中读取数据而是从指定字符串中读取数据。
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
package main
import (
"fmt"
)
func main() {
var name string
var age int
n, err := fmt.Sscanf("Kim is 22 years old", "%s is %d years old", &name, &age)
if err != nil {
panic(err)
}
fmt.Printf("%d: %s, %d\n", n, name, age)
}
`
2: Kim, 22
`