1、golang不同输入语句的区别:
特点 | ||||
Scan | Scanln | Scanf | 从控制台读取内容 | |
Sscan | Sscanln | Sscanf | 从指定字符串中读取内容 | |
Fscan | Fscanln | Fscanf | 从文本中读取内容 | |
特点 | 在读取内容的时候不会关注换行 | 在读取内容的时候, 遇到换行时结束 | 以格式化的方式读取内容,遇到换行时结束 |
2、fmt.Scan(a ...interface{}) (n int, err error):
Scan扫描从标准输入读取的文本,将连续的空格分隔值存储在连续的参数中,换行符算作空格。它返回成功扫描的项目数,如果小于参数的数量,则err将报告错误原因。例如:
package main
import "fmt"
func main() {
var (
name string
age int
married bool
)
fmt.Println("请输入姓名,年龄,是否已婚")
//Scan可以接收多个参数,用户输入参数默认使用空格或者回车换行符分割输入设备传入的参数,直到接收所有的参数为止。
fmt.Scan(&name, &age, &married)
fmt.Println(name, age, married)
}
注意: golang中使用"&"获取score变量(要定义的变量,也就是变量名)的内存地址(即取变量内存地址的运算符),通过键盘输入为score变量指向的内存地址赋初值。
3、func Scanln(a ...interface{}) (n int, err error):
Scanln类似于Scan,但是如果遇到换行就停止扫描,并且在最后一项之后必须有换行符或者EOF。例如:
package main
import "fmt"
func main() {
var (
name string
age int
married bool
)
fmt.Println("请输入姓名,年龄,是否已婚")
//可以接收多个参数,用户输入参数默认使用空格分割输入设备传入的参数,遇到回车换行符就结束接收参数
result, err := fmt.Scanln(&name, &age, &married)
fmt.Println(result)
fmt.Println(err)
fmt.Println(name, age, married)
}
4、func Scanf(format string, a ...interface{}) (n int, err error):
Scanf扫描从标准输入读取文本,将连续的空格分隔值存储到由格式确定的连续参数中,它返回成功扫描的项目数。如果这小于参数的数量,则err将报告错误原因。输入中的换行符必须与格式中的换行符匹配。例如:
package main
import "fmt"
func main() {
var (
name string
age int
married bool
)
fmt.Println("请输入姓名,年龄,是否已婚")
//可以接收多个参数,用户输入参数默认使用空格分割输入设备传入的参数,遇到回车换行符就结束接收参数;还可以格式化输入的数据类型
result, err := fmt.Scanf("%s %d \n %t", &name, &age, &married)
fmt.Println(result)
fmt.Println(err)
fmt.Println(name, age, married)
}
5、输入byte类型的数据:byte 类型是 uint8 的别名,代表了 ASCII 码的一个字符,因此在标准输入byte类型的变量时必须接受的是一个数字。例如:
package main
import "fmt"
func main() {
var input byte
fmt.Println("请输入一个字母:")
result, err := fmt.Scan(&input)
if err != nil { //"nil"在这里表示空,可以简单的看成其它语言中的null
fmt.Println("err:", err)
}
fmt.Println(result)
fmt.Println(input)
}
如果一定要输入字符类型,可以使用Scanf来进行输入:
package main
import "fmt"
func main() {
var input byte
fmt.Println("请输入一个字母:")
result, err := fmt.Scanf("%c", &input) //"%c"表示将指定数据转换成ascII码中的字符,将ascII码中的字符转换成对应的数据。
if err != nil {
fmt.Println("err:", err)
}
fmt.Println(result)
fmt.Println(input)
}
6、func Sscan(str string, a ...interface{}) (n int, err error):
参数 | 含义 |
str string | 此参数表示将要扫描的指定文本。 |
a …interface{} | 此参数接收每个文本。 |
例如:
package main
import "fmt"
func main() {
//从指定字符串中读取内容
var (
name string
age int
)
fmt.Sscan("zhangsan 18", &name, &age)
fmt.Println(name, age)
}
7、 func Sscanf(str string, format string, a ...interface{}) (n int, err error):
参数 | 含义 |
str string | 此参数表示将要扫描的指定文本。 |
format string | 用于指定字符串的每个元素,此参数是不同的格式类型。 |
a …interface{} | 此参数接收字符串的每个元素。 |
例如:
package main
import "fmt"
func main() {
//从指定字符串中按照格式读取内容
var (
name string
age int
)
result, err := fmt.Sscanf("my name is zhangsan age 18", "my name is %s age %d", &name, &age)
if err != nil {
fmt.Println(err)
}
fmt.Println(result)
fmt.Println(name, age)
}