fmt
fmt包使用函数实现I/O格式化
常用格式化
通用
%v 值的默认格式表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的Go语法表示
%T 值的类型的Go语法表示
布尔
%t 单词true或false
整数
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
浮点数
%e 科学计数法,如-1234.456e+78
%E 科学计数法,如-1234.456E+78
字符串和[]byte
%s 直接输出字符串或者[]byte
%q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x 每个字节用两字符十六进制数表示(使用a-f)
%X 每个字节用两字符十六进制数表示(使用A-F)
指针:
%p 表示为十六进制,并加上前导的0x
精度
%f: 默认宽度,默认精度
%9f 宽度9,默认精度
%.2f 默认宽度,精度2
%9.2f 宽度9,精度2
%9.f 宽度9,精度0
对数字123.45,格式%6.2f 输出123.45(带小数点)
对于大多数类型的值,宽度是输出字符数目的最小数量,如果必要会用空格填充。对于字符串,精度是输出字符数目的最大数量,如果必要会截断字符串。
对于整数,宽度和精度都设置输出总长度。采用精度时表示右对齐并用0填充,而宽度默认表示用空格填充。
对于浮点数,宽度设置输出总长度;精度设置小数部分长度(如果有的话),除了%g和%G,此时精度设置总的数字个数。
函数
Printf
func Printf(format string, a ...interface{}) (n int, err error)
Printf根据format参数生成格式化的字符串并写入标准输出。返回写入的字节数和遇到的任何错误。
Fprintf
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
fmt.Fprintf(os.Stdout, "%s is %s\n",zzt,sex)
fileObj, _ := os.OpenFile(Path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
fmt.Fprintf(fileObj, "[%s]\n", time.Now().Format("2006-01-02 15:04:05"))
Fprintf根据format参数生成格式化的字符串并写入w。返回写入的字节数和遇到的任何错误。
Sprintf
func Sprintf(format string, a ...interface{}) string
Sprintf根据format参数生成格式化的字符串并返回该字符串。
name := fmt.Sprintf("%s is %s", "zzt", "dsb")
newLogName := fmt.Sprintf("%s.bak%s", logName, nowStr) // 拼接一个日志文件备份的名字
func Print(a ...interface{}) (n int, err error)
Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格。返回写入的字节数和遇到的任何错误。
Println
func Println(a ...interface{}) (n int, err error)
Println采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。返回写入的字节数和遇到的任何错误。
Print 和 Println 比较
Println 打印的每一项之间都会有空行,Print 没有
Println 会自动换行,Print 不会
fmt.Println("go", "hello")
fmt.Println("go", "hello")
fmt.Print("go", "hello")
fmt.Print("go", "hello")
go hello
go hello
gohellogohello
Errorf
func Errorf(format string, a ...interface{}) error
Errorf根据format参数生成格式化字符串并返回一个包含该字符串的错误。
Scanf
func Scanf(format string, a ...interface{}) (n int, err error)
Scanf从标准输入扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。
var name1, name2 string
fmt.Scanf("%s %s", &name1, &name2)
ni hao
ni hao
Fscanf
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
Fscanf从r扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。
var name1, name2 string
n, err := fmt.Fscanf(fileObj, "%s %s", &name1, &name2)
if err != nil {
fmt.Println(err)
}
fmt.Println(n, name1, name2)
//2 nihao zzt
Sscanf
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
Sscanf从字符串str扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。
name := "nihao zzt"
var name1, name2 string
fmt.Sscanf(name, "%s %s", &name1, &name2)
func Scan
func Scan(a ...interface{}) (n int, err error)
Scan从标准输入扫描文本,将成功读取的空白分隔的值保存进成功传递给本函数的参数。换行视为空白。返回成功扫描的条目个数和遇到的任何错误。如果读取的条目比提供的参数少,会返回一个错误报告原因。
func Fscan
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
Fscan从r扫描文本,将成功读取的空白分隔的值保存进成功传递给本函数的参数。换行视为空白。返回成功扫描的条目个数和遇到的任何错误。如果读取的条目比提供的参数少,会返回一个错误报告原因。
func Sscan
func Sscan(str string, a ...interface{}) (n int, err error)
Sscan从字符串str扫描文本,将成功读取的空白分隔的值保存进成功传递给本函数的参数。换行视为空白。返回成功扫描的条目个数和遇到的任何错误。如果读取的条目比提供的参数少,会返回一个错误报告原因。
func Scanln
func Scanln(a ...interface{}) (n int, err error)
Scanln类似Scan,但会在换行时才停止扫描。最后一个条目后必须有换行或者到达结束位置。
func Fscanln
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
Fscanln类似Fscan,但会在换行时才停止扫描。最后一个条目后必须有换行或者到达结束位置。
func Sscanln
func Sscanln(str string, a ...interface{}) (n int, err error)
Sscanln类似Sscan,但会在换行时才停止扫描。最后一个条目后必须有换行或者到达结束位置。
输入对比
Scan,Fscan,Sscan 将输入中的换行符视为空格。
Scanln,Fscanln 和 Sscanln 在换行符处停止扫描并要求项目后跟换行符或 EOF。
Scanf,Fscanf 和 Sscanf 根据格式字符串解析参数,类似于 Printf 的格式字符串。在下面的文本中,'space' 表示除换行符之外的任何 Unicode 空白字符。
eg
fmt.Scan(&name1, &name2)
fmt.Println(name1, name2)
n
n
n n
fmt.Scanln(&name1, &name2)
fmt.Println(name1, name2)
n
n
//退出了
牛客输入输出测试
第一题:
输入描述:
输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
输出描述:
输出a+b的结果
答案
func main(){
for{
var n1,n2 int
n, _:= fmt.Scanln(&n1,&n2)
if n >0{
fmt.Println(n1+n2)
}else{
break
}
}
}