GoTips--有关输入输出:fmt包的使用

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) // 拼接一个日志文件备份的名字

Print

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值