Go语言输入
- 输入函数:Go 语言使用
fmt.Scan()
、fmt.Scanln()
和fmt.Scanf()
函数从用户处接收输入,这些函数都定义在fmt
包中。 - 输入处理细节:
fmt.Scan()
读取到空格为止的输入;fmt.Scanln()
读取到新行为止的输入;fmt.Scanf()
使用格式化标识符来读取特定格式的输入。 - 多重输入和格式化:可以使用这些函数一次读取多个输入,例如用空格分隔的不同数据类型的值。
Scanf()
函数允许通过指定格式标识符(如%d
、%s
)来精确控制输入的读取。
在 Go 中,我们使用 scan()
函数从用户那里获取输入。例如,
package main
import "fmt"
func main() {
var name string
// 获取 name 的输入值
fmt.Print("请输入您的名字: ")
fmt.Scan(&name)
fmt.Printf("名字: %s", name)
}
输出
请输入您的名字: Rosie
名字: Rosie
在上面的例子中,这一行
fmt.Scan(&name)
从用户那里获取输入值,并将其赋值给 name
变量。
Go 编程提供了 Scan()
方法的三种不同变体:
fmt.Scan()
fmt.Scanln()
fmt.Scanf()
注意: 所有这些函数都定义在 fmt
包下。所以,在使用这些函数之前,我们必须导入 fmt
包。
Go fmt.Scan()
如前所述,Scan()
函数从用户那里获取输入。然而,它只能获取到空格之前的输入值。
当遇到空格时,空格之前的值被赋值给指定的变量。例如,
package main
import "fmt"
func main() {
var language string
// 获取 language 的输入值
fmt.Print("请输入你最喜欢的语言: ")
fmt.Scan(&language)
fmt.Printf("最喜欢的语言: %s", language)
}
输出
请输入你最喜欢的语言: Go 编程
最喜欢的语言: Go
在上面的例子中,我们提供了输入值 Go 编程
。然而,我们只得到了 Go
作为输出。
这是因为 Scan()
函数只获取空格之前的输入值。
使用 Scan() 获取多个输入
在 Go 中,我们可以使用 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)
}
输出
请输入你的名字和年龄:
Maria
27
名字: Maria
年龄: 27
在上面的例子中,我们创建了两个变量,name 和 age。注意我们使用了单个 Scan()
函数来为这两个变量获取输入值。
fmt.Scan(&name, &age)
这里,我们在两行不同的输入中提供了两个输入值 Maria
和 27(输入值用换行符分隔)。在这种情况下,第一行的值被赋给 name 变量,第二行的值被赋给 age。
我们也可以在同一行中用空格分隔这两个值。
输出
请输入你的名字和年龄:
Maria 27
名字: Maria
年龄: 27
在这种情况下,空格之前的值被赋给第一个变量 name,空格之后的值被赋给第二个变量 age。
Go 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)
}
输出
请输入你的名字和年龄:
Maria
名字: Maria
年龄: 0
在上面的例子中,我们使用了 Scanln()
函数来获取 name 和 age 的两个输入值。
fmt.Scanln(&name, &age)
然而,当我们在提供第一个值 Maria
后按下回车时,程序就退出了。这是因为 Scanln()
只接收到新行为止的输入值,所以当它遇到 Maria
后的回车时,就停止了输入。
如果我们想要输入 age 的值,我们必须提供用空格分隔的值。
输出
输入你的姓名和年龄:
Maria 27
姓名:Maria
年龄:27
这里,我们用空格分隔了两个输入,因此 Scanln()
可以接收两个输入值。
Go fmt.Scanf()
fmt.Scanf()
函数与 Scanln()
函数类似。唯一的区别是 Scanf()
使用格式说明符来获取输入。例如,
// 使用 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)
}
输出
输入你的姓名和年龄:
Maria 27
姓名:Maria
年龄:27
在上面的例子中,我们使用了 Scanln()
函数和相应的格式说明符来获取 name 和 age 的两个输入值。
fmt.Scanf("%s %d", &name, &age)
这里,
%s
- 指定字符串输入,分配给 name 变量%d
- 指定整数输入,分配给 age 变量
就像 Scanln()
一样,Scanf()
函数接收用空格分隔的值。当遇到新行时,Scanf()
停止接收输入值。这就是为什么我们在同一行中给出了输入,用空格分隔。
在 Go 中,每种数据类型都有一个独特的格式说明符,我们可以使用它们来使用 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。