介绍

输出

预计阅读时间2 分钟 3 views

前言

在 Go 编程中,我们使用 Scan() 函数来获取用户输入。例如:

package main
import "fmt"

func main() {
  var name string

  // 输入名字
  fmt.Print("请输入你的名字: ")
  fmt.Scan(&name)

  fmt.Printf("名字: %s", name)
}

输出

请输入你的名字: 小明
名字: 小明

在上述示例中,fmt.Scan(&name) 从用户那里获取输入值并将其分配给 name 变量。

Go 编程提供了三种不同的 Scan() 方法变体:

  • fmt.Scan()
  • fmt.Scanln()
  • fmt.Scanf()

注意:所有这些函数都定义在 fmt 包中。因此,在使用这些函数之前,我们必须导入 fmt 包。

作用

这些函数用于从用户获取输入,支持不同的输入方式和格式化需求。

使用场景

  • fmt.Scan():获取输入到第一个空格为止。
  • fmt.Scanln():获取输入直到遇到换行符。
  • fmt.Scanf():使用格式说明符获取输入值。

示例

  1. 使用 fmt.Scan()

Scan() 函数用于从用户获取输入。然而,它只能获取到空格前的值。

示例

package main
import "fmt"

func main() {
  var language string

  // 输入喜爱的编程语言
  fmt.Print("请输入你最喜欢的编程语言: ")
  fmt.Scan(&language)

  fmt.Printf("喜欢的编程语言: %s", language)
}

输出

请输入你最喜欢的编程语言: Go 编程
喜欢的编程语言: Go

在此示例中,我们输入了 Go 编程,但输出只有 Go,这是因为 Scan() 函数只获取到第一个空格前的值。

使用 Scan() 获取多个输入

我们可以使用 Scan() 函数获取多个输入值。例如:

package main
import "fmt"

func main() {
  // 创建变量
  var name string
  var age int

  // 输入名字和年龄
  fmt.Println("请输入你的名字和年龄:")
  fmt.Scan(&name, &age)

  // 打印输入值
  fmt.Printf("名字: %s\n年龄: %d", name, age)
}

输出

请输入你的名字和年龄:
小红
25
名字: 小红
年龄: 25

在这个示例中,我们创建了两个变量 nameage。注意我们使用了一个 Scan() 函数来获取两个变量的输入值。

使用空格分隔的单行输入

package main
import "fmt"

func main() {
  // 创建变量
  var name string
  var age int

  // 输入名字和年龄
  fmt.Println("请输入你的名字和年龄:")
  fmt.Scan(&name, &age)

  fmt.Printf("名字: %s\n年龄: %d", name, age)
}

输出

请输入你的名字和年龄:
小红 25
名字: 小红
年龄: 25

在这种情况下,空格前的值分配给第一个变量 name,空格后的值分配给第二个变量 age

  1. 使用 fmt.Scanln()

Scanln() 函数获取输入值直到遇到换行符。当遇到换行符时,它停止获取输入值。

示例

package main
import "fmt"

func main() {
  var name string
  var age int

  // 输入名字和年龄
  fmt.Println("请输入你的名字和年龄:")
  fmt.Scanln(&name, &age)

  fmt.Printf("名字: %s\n年龄: %d", name, age)
}

输出

请输入你的名字和年龄:
小红
名字: 小红
年龄: 0

在这个示例中,我们使用了 Scanln() 函数来获取名字和年龄的两个输入值。但是当我们输入名字后按下回车,程序结束了。这是因为 Scanln() 只获取到换行符前的值,因此只有 小红 被读取到,而年龄保持默认值 0

要获取两个值,必须在同一行中以空格分隔

package main
import "fmt"

func main() {
  var name string
  var age int

  fmt.Println("请输入你的名字和年龄:")
  fmt.Scanln(&name, &age)

  fmt.Printf("名字: %s\n年龄: %d", name, age)
}

输出

请输入你的名字和年龄:
小红 25
名字: 小红
年龄: 25

这里,我们在同一行中输入两个值,并用空格分隔,因此 Scanln() 能够读取两个输入值。

  1. 使用 fmt.Scanf()

fmt.Scanf() 函数类似于 Scanln() 函数,唯一的区别是 Scanf() 使用格式说明符来获取输入值。

示例

package main
import "fmt"

func main() {
  var name string
  var age int

  // 使用格式说明符输入名字和年龄
  fmt.Println("请输入你的名字和年龄:")
  fmt.Scanf("%s %d", &name, &age)

  fmt.Printf("名字: %s\n年龄: %d", name, age)
}

输出

请输入你的名字和年龄:
小红 25
名字: 小红
年龄: 25

在这个示例中,我们使用了 Scanf() 函数来获取名字和年龄的输入值,使用了相应的格式说明符。

格式说明符

数据类型格式说明符
整数%d
浮点数%g
字符串%s
布尔值%t

示例:获取浮点和布尔类型的输入

package main
import "fmt"

func main() {
  var temperature float32
  var sunny bool

  // 输入温度
  fmt.Println("请输入当前温度:")
  fmt.Scanf("%g", &temperature)

  // 输入是否晴天
  fmt.Println("今天是晴天吗?")
  fmt.Scanf("%t", &sunny)

  fmt.Printf("当前温度: %g\n今天是晴天吗? %t", temperature, sunny)
}

输出

请输入当前温度:
31.2
今天是晴天吗?
true
当前温度: 31.2
今天是晴天吗? true

在这个示例中,我们使用 %g 获取 float32 类型的输入,使用 %t 获取 bool 类型的输入。输入的 31.2 被分配给 temperature 变量,true 被分配给 sunny

Leave a Comment

分享此文档

输出

或复制链接

内容