这个和C语言的输入基本差不多,需要使用占位符,如下:
%v | %d | %f | %t | %c | %s | %T | %o | %x和%X | %e和%E |
---|---|---|---|---|---|---|---|---|---|
按数据原格式 | 十进制整形 | 单精度浮点型(float32) | 布尔型 | 字符型 | 字符串型 | 变量的数据类型 | 八进制 | 十六进制,前者的字母用大写表示,后者用小写表示 | 科学计数法 |
package main
import "fmt"
func main() {
var a int
var b float64
var str string
var c bool
//注意:在go语言中字符类型不是char,而是byte
var d byte
//测试的是这个
fmt.Scanf("%d %f %s %t %c", &a, &b, &str, &c, &d)
fmt.Printf("%d %f %s %t %c", a, b, str, c, d)
//输入整型
fmt.Scanf("%d", &a)
fmt.Printf("整型:%d", a)
//输入浮点型
fmt.Scanf("%f", &b)
fmt.Printf("浮点型:%f", b)
//输入字符串
fmt.Scanf("%s", &str)
fmt.Printf("字符串:%s", str)
//输入布尔类型
fmt.Scanf("%t", &c)
fmt.Printf("布尔:%t", c)
//输入字符类型
fmt.Scanf("%c", &d)
fmt.Printf("字符:%c", d)
}
这个函数输入时是一行一行的读取数据
使用多行读入
package main
import "fmt"
func main() {
var a int
var b float64
var str string
var c bool
fmt.Scanln(&a)
fmt.Scanln(&b)
fmt.Scanln(&str)
fmt.Scanln(&c)
fmt.Printf("%d %f %s %t", a, b, str, c)
}
使用Scanln一行输入
package main
import "fmt"
func main() {
var a int
var b float64
var str string
var c bool
fmt.Scanln(&a, &b, &str, &c)
fmt.Printf("%d %f %s %t", a, b, str, c)
}
Scan的用法和Scanln差不多,可以写在一行
package main
import "fmt"
func main() {
var a int
var b float64
var c bool
var str string
//使用scan输入
fmt.Scan(&a, &b, &c, &str)
fmt.Printf("%d %.2f %t %s", a, b, c, str)
}
bufio包是对IO的封装,可以操作文件等内容,同样可以用来接收键盘的输入,此时对象不是文件,而是os.Stdin,也就是标准输入设备。
bufio包含了Reader、Writer、Scanner等对象,封装了很多对IO内容处理方法,但要从键盘输入,使用Reader对象(或Scanner对象)。
会读取输入的一个字符,如果输入字符串,也只会读取第一个字符。
方法参数及返回值
//返回byte类型和error
func (b *Reader) ReadByte() (byte, error)
代码
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//创建一个reader对象
reader := bufio.NewReader(os.Stdin)
//使用Reader对象进行读取数据
//ReadByte:用来结仇一个byte类型
res, err := reader.ReadByte()
if err != nil {
//说明有问题
panic("出问题了!")
} else {
//打印数据,会打印出数据的ASCII码
//如果读一行只会显示第一个字符的ASCII码
fmt.Println(res)
//将ASCII码转为string类型
fmt.Println(string(res))
}
}
注意
需要byte类型参数,当读取值遇到这个byte类型参数时,则会停止读取,返回byte参数及之前的字符。
方法参数及返回值
//返回值:[]byte,error []byte:即可以读多个字符
//参数:byte 输入要停止返回的byte类型参数
func (b *Reader) ReadBytes(delim byte) ([]byte, error)
代码
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//创建一个reader对象
reader := bufio.NewReader(os.Stdin)
//ReadBytes
//当读取到‘\n’时,即一行完
res, err := reader.ReadBytes('\n')
if err != nil {
panic("出错咯~~")
} else {
fmt.Println(res)
//转换成字符串输出
fmt.Println(string(res))
}
}
注意
是一个低水平的行数据读取原语,大多数人会使用Read.bytes(‘\n’)或Read.String(‘\n’)代替,或者使用Scanner。
方法参数及返回值
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
用来处理unicode或utf-8字符,该函数可以接收该类字符,返回接受字符的rune值、size大小(即字节数)以及error。
方法参数及返回值
//读数据,并且将其转换为切片,可以返回字符长度
func (b *Reader) ReadRune() (r rune, size int, err error)
代码
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//创建一个reader对象
reader := bufio.NewReader(os.Stdin)
//ReadRune
res, size, err := reader.ReadRune()
if err != nil {
panic("出错咯~~")
} else {
//输出rune值
fmt.Println(res)
//输出字节数
fmt.Println(size)
}
}
接收以byte类型结束之前的(包括参数)的字符串
方法参数及返回值
func (b *Reader) ReadString(delim byte) (string, error)
代码
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//创建一个reader对象
reader := bufio.NewReader(os.Stdin)
//ReadString
str, err := reader.ReadString('b')
if err != nil {
panic("出错咯~~")
} else {
fmt.Println(str)
}
}
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//设置一个最大值
maxNum := 100
//随机生成一个数,并且其最大数为100
//注意:在生成随机数之前,需要在rand.seed()中放入时间戳,不然会使随机数始终是一样的
rand.Seed(time.Now().UnixNano())
//生成一个随机数
random := rand.Intn(maxNum)
//使用for死循环
var val int
for {
fmt.Println("请输入您猜测的数字:")
//输入数字,这个也是需要改进的地方
fmt.Scanf("%d\n", &val)
if val < random {
fmt.Println("您猜测的数字太小了,请重新猜测:")
} else if val > random {
fmt.Println("您猜测的数字太大了,请重新猜测:")
} else {
//猜测成功
fmt.Println("恭喜您,猜测成功!")
break
}
}
}