一文了解 Go fmt 标准库输入函数的使用

Go语言fmt库输入函数详解
本文详细介绍了Go语言fmt包中的输入函数,包括Fscan、Fscanf、Fscanln、Scan、Scanf、Scanln、Sscan、Sscanf和Sscanln的使用方法和示例。这些函数用于从文件、标准输入和字符串中读取数据,并按指定格式赋值给变量。文章通过实例代码展示了如何从文件读取整数、从标准输入接收用户输入以及从字符串中解析信息。

耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,今天分享的内容是 Go fmt 标准库输入函数的使用。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

fmt 输入函数

函数描述
Fscan(r io.Reader, a …any) (n int, err error)从 r 中读取内容,以空格或换行符为分隔符,按顺序依次赋值给不同参数
Fscanf(r io.Reader, format string, a …any) (n int, err error)从 r 中读取内容,以空格为分隔符,将分割后的内容存储到由格式决定的不同参数中。r 中存在的换行符必须与格式中的换行符相匹配
Fscanln(r io.Reader, a …any) (n int, err error)类似于 Fscan 函数,不同点是遇到换行符后停止读取,最后一项内容后面必须有换行符或 EOF
Scan(a …any) (n int, err error)从标准输入读取内容,以空格或换行符为分隔符,按顺序依次赋值给不同参数
Scanf(format string, a …any) (n int, err error)从标准输入读取内容,以空格为分隔符,将分割后的内容存储到由格式决定的不同参数中。标准输入中的换行符必须与格式中的换行符相匹配。特殊情况是 %c 占位符可以接收空格或换行符等
Scanln(a …any) (n int, err error)类似于 Scan 函数,不同点是遇到换行符后停止读取,最后一项内容后面必须有换行符或 EOF
Sscan(str string, a …any) (n int, err error)从字符串中读取内容,以空格或换行符为分隔符,按顺序依次赋值给不同参数
Sscanf(str string, format string, a …any) (n int, err error)从字符串中读取内容,以空格为分隔符,将分割后的内容存储到由格式决定的不同参数中。字符串中的换行符必须与格式中的换行符相匹配
Sscanln(str string, a …any) (n int, err error)类似于 Sscan 函数,不同点是遇到换行符后停止读取,字符串最后面必须有换行符或 EOF

Fscan、Fscanf、Fscanln

  • Fscan
    func main() {
    	file, err := os.Open("./test.txt")
    	if err != nil {
    		return
    	}
    	defer file.Close()
    	var num1, num2 int
    	_, err = fmt.Fscan(file, &num1, &num2)
    	if err != nil {
    		return
    	}
    	fmt.Println(num1, num2) // 123 456
    }
    
    • ./test.txt 的内容为:123 456
    • Fscan 函数通过空格或换行符分隔内容并赋值给变量,因此使用 num1num2 变量接收分隔后的内容 123 456
    • 必须将 num1num2 的地址传递进去,而不是值传递。
  • Fscanf
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	file, err := os.Open("./test.txt")
    	if err != nil {
    		return
    	}
    	defer file.Close()
    	var num1, num2 int
    	_, err = fmt.Fscanf(file, "%d%d", &num1, &num2)
    	if err != nil {
    		return
    	}
    	fmt.Println(num1, num2) // 123 456
    }
    
    通过占位符 %d,将文件里的内容赋值给 num1num2 变量。
  • Fscanln
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	file, err := os.Open("./test.txt")
    	if err != nil {
    		return
    	}
    	defer file.Close()
    	var num1, num2 int
    	_, err = fmt.Fscanln(file, &num1, &num2)
    	if err != nil {
    		return
    	}
    	fmt.Println(num1, num2) // 123 456
    }
    
    FscanlnFscan 类似,但是遇到换行符停止扫描,如果所扫描到的内容数量与变量数量不一致,将会返回 error

Scan、Scanf、Scanln

  • Scan
    import "fmt"
    
    func main() {
    	var name string
    	fmt.Println("请输入你的姓名:")
    	fmt.Scan(&name)
    	fmt.Println(name) // 小明
    }
    
    • 运行结果:
      请输入你的姓名:
      小明
      小明
      
      使用 name 变量接收输入的值
  • Scanf
    import "fmt"
    
    func main() {
    	var name string
    	var age int
    	fmt.Println("请输入你的姓名和性别:")
    	fmt.Scanf("%s%d", &name, &age)
    	fmt.Println(name, age) // 小明
    }
    
    • 运行结果:
    请输入你的姓名和性别:
    小明 18
    小明 18
    
    使用占位符 %s%d 分别指定将字符串和整型的数据赋值给 nameage
  • Scanln
    import "fmt"
    
    func main() {
    	var name string
    	fmt.Println("请输入你的姓名:")
    	fmt.Scanln(&name)
    	fmt.Println(name) // 小明
    }
    
    Scan 是类似的,只不过它遇到换行符后就停止扫描。

Sscan、Sscanf、Sscanln

import "fmt"

func main() {
	var name string
	var age int
	fmt.Sscan("小明 20", &name, &age)
	fmt.Println(name, age) // 小明 20

	fmt.Sscanf("小红 18", "%s%d", &name, &age)
	fmt.Println(name, age) // 小红 18

	fmt.Sscanln("小刚 21", &name, &age)
	fmt.Println(name, age) // 小刚 21
}

这三个输入函数和上面介绍的类似,只不过这三个是从字符串里面读取的内容。

小结

本篇文章对 fmt 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员陈_明勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值