登录 主页

go - fmt.Scan()、fmt.Scanln() 与 fmt.Scanf() 包的使用

2024-01-28 11:36AM

参考:https://blog.51cto.com/u_14601432/2482961

go fmt

需要接收用户输入的数据,就可使用键盘输入语句来获取。

1. fmt.Scan

语法:

func Scan(a ...interface{}) (n int, err error)

Scan 将碰到第一个空格或换行符之前的内容赋值给变量,如果 Scan 中有多个变量,变量值用空格或换行符分割,所以换行和空格是不能储存到变量内的。

eg :

package main
import "fmt"

func main() {
  var name string
  fmt.Printf("请输入名字:")
  fmt.Scan(&name)
  fmt.Println("name:", name)
}

运行结果:

meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run go_book.go 
请输入名字:李四
// 需要输入名字
name: 李四

2. fmt.Scanln

语法:

func Scanf(format string, a ...interface{}) (n int, err error)

先声明需要的变量

eg:

package main
import "fmt"

func main() {
  var name string
  var age int
  fmt.Printf("请输入名字:")
  fmt.Scan(&name)
  fmt.Printf("请输入年龄:")
  fmt.Scan(&age)
  fmt.Printf("名字是:%v 年龄是:%v\n", name, age)
}

// Scanln类似Scan,但在遇到换行符会立刻停止扫描

运行结果:

meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run go_book.go 
请输入名字:张三 // 需要输入名字
请输入年龄:18 // 需要输入年龄
名字是:张三 年龄是:18

Scan和Scanln基本相同,唯一区别是当读取多个变量的时候,遇到换行符Scanln会直接结束,未督导输入值的变量为零值; Scan会等待,直到输入的值满足参数的个数后再遇到换行符才会结束。

(fmt.Scanln遇到回车就结束扫描了,这个比较常用)

3. fmt.Scanf

语法:

func Scanf(format string, a ...interface{}) (n int, err error)

Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。

函数返回成功扫描的数据个数和遇到的任何错误。

fmt.Scanf()可以按指定的格式输入,输入值,使用空格隔开。

eg:

package main
import "fmt"

func main() {
  var name string
  var age int
  fmt.Println("请输入您的姓名, 年龄:")
  fmt.Scanf("%s %d", &name, &age)
  fmt.Printf("名字是:%v 年龄是:%v\n", name, age)
}

运行结果:

meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run go_book.go 
请输入您的姓名, 年龄:
王五 18
// 名字和年龄需要使用空格隔开
名字是:王五 年龄是:18 

如果名字和年龄没有使用空格隔开,结果会导致没有年龄的数据:

meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run go_book.go 
请输入您的姓名, 年龄
王五18
名字是:王五18 年龄是:0

fmt.Scanf不同于fmt.Scan简单的以空格作为输入数据的分隔符,fmt.Scanf为输入数据指定了具体的输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。 

返回>>

登录

请登录后再发表评论。

评论列表:

目前还没有人发表评论