输出
前言
在 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()
:使用格式说明符获取输入值。
示例
- 使用
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
在这个示例中,我们创建了两个变量 name
和 age
。注意我们使用了一个 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
。
- 使用
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()
能够读取两个输入值。
- 使用
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
。