首页 > 其他分享 >一文了解 Go fmt 标准库输入函数的使用

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

时间:2022-12-31 19:01:10浏览次数:36  
标签:一文 err int fmt num1 Go 换行符 name

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

哈喽大家好,我是陈明勇,今天分享的内容是 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​​ 函数通过空格或换行符分隔内容并赋值给变量,因此使用 ​​num1​​ 和 ​​num2​​ 变量接收分隔后的内容 ​​123​​ ​​456​​。
  • 必须将 ​​num1​​ 和 ​​num2​​ 的地址传递进去,而不是值传递。
  • 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,将文件里的内容赋值给 ​​num1​​ 和 ​​num2​​ 变量。

  • 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
}

​Fscanln​​ 与 Fscan 类似,但是遇到换行符停止扫描,如果所扫描到的内容数量与变量数量不一致,将会返回 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​​​ 分别指定将字符串和整型的数据赋值给 ​​name​​​ 和 ​​age​​。

  • 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 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。

标签:一文,err,int,fmt,num1,Go,换行符,name
From: https://blog.51cto.com/chenmingyong/5982196

相关文章

  • Good Bye 2022: 2023 is NEAR C
    GoodBye2022:2023isNEARC第一道题真是没理解,wa了好多次还好后来知道了题意就好做了,我现在在这里就补一下c,之前想了一会,还是不明白,后来想到了一些,容我讲一讲C这道......
  • Good Bye 2022: 2023 is NEAR
    A.KoxiaandWhiteboards(CF1770A)题目大意给定一个包含\(n\)个数的数组\(a\),以及\(m\)次操作。第\(i\)次操作将\(a\)中的一个数替换为\(b_i\)。问\(m\)次操......
  • MongoDB基础命令
    MongoDB一、概念 MongoDB是一个基于分布式文件存储的数据库。nosql数据库二、业务应用场景 1、对数据库高并发读写的需求 2、对海量数据的高效率存储和......
  • Good Bye 2022: 2023 is NEAR D
    D.KoxiaandGametilian很容易发现就是我们要让每个数字都doublechoice一次才能得到答案比如第一个样例我们发现11已经doublechoice一次过了所以我们该点可以搞......
  • Good Bye 2022: 2023 is NEAR
    KoxiaandNumberTheory(鸽巢原理)题目大意给定一个长度为\(n(2\len\le100)\)的数组\((1\lea[i]\le10^{18})\),问是否存在一个正整数x,使得对于任意的i,j都满足\(gc......
  • Codeforces Good Bye 2022 CF 1770 A~E 题解
    题目链接A.KoxiaandWhiteboards注意每一步替换操作都是强制的,而不是可选的。所以就用一个multiset维护所有的数,每次选一个最小的替换掉即可。时间复杂度\(O(nlogn)\)......
  • Good Bye 2022: 2023 is NEAR
    D.KoxiaandGame记\(ans=\prod\limits_{i=1}^{i=n}add_i\),\(add_i\)就是\(i\)的贡献。记数字\(i\)只和自己连起来称为\(i\)自环。例如:123123则称\(1......
  • Algorithm 2 - 一些数论/组合计数知识
    0.一些前置知识莫比乌斯函数:定义\(\mu(x)\)为:当\(x\)含平方因子,则\(\mu(x)=0\);否则设其有\(p\)个质因子,\(\mu(x)=(-1)^p\)。特别的,\(\mu(1)=1\)。莫比乌斯......
  • go web 通用脚手架CLD模型
    goweb通用脚手架:CLD模型结构图config.yamlapp:name:"web_app"mode:"dev"port:8081log:level:"debug"filename:"web_app.log"max_size:20......
  • Google Earth Engine(GEE)——Sentinel-2影像在同一区域同一时间段有多个不同的ID影像,如
    Sentinel-2以条带方式拍摄地球图像,这些条带根据​​军事网格参考系统​​​或“MGRS”切片方案划分为瓷砖分布。对于您所在的地区,有两个具有广泛重叠的磁贴(36TYM、37TBG)。......