目录
[4.os.Stdin --标准输入,从键盘输入](#4.os.Stdin --标准输入,从键盘输入)
知识结构
输入
为了展示集中输入的区别,将直接进行代码演示。
三者区别的结论:Scanf格式化输入;Scanln碰到换行符就退出了;
1.Scan
scan相对于scanln就没有回车键的限制,按回车,只要你的内容没有输入完毕,就会等你输入完:
Go
package main
import "fmt"
func main(){
var name string
var passwd string
fmt.Println("请输入用户名和密码:")
fmt.Scan(&name, &passwd)
fmt.Println(name, passwd)
fmt.Println("请输入用户名:")
fmt.Scan(&name) //&取地址符
fmt.Println("请输入密码:")
fmt.Scan(&passwd)
fmt.Println(name, passwd)
}
2.Scanf
会进行格式化输入:
Go
package main
import "fmt"
func main() {
var name string
var passwd string
fmt.Println("请输入用户名和密码:")
fmt.Scanf("a=%s b=%s", &name, &passwd) //格式化输入
fmt.Printf("name is %s,passwd is %s\n", name, passwd) //格式化输出
}
使用Scanf的时候要按照指定的格式输入才可以正确输出:
3.Scanln
Go
package main
import "fmt"
func main() {
var name string
var passwd string
fmt.Scanln(&name, &passwd) //碰到换行符就退出了
fmt.Println("name is", name, "passwd is", passwd)
}
什么意思呢?就是再使用Scanln进行输入时,如果你敲回车了,就会判定你已经输入完毕,就会出现上面的错误结果。避免这种错误可以使用空格进行隔开:
综上,scan是最常用的输入命令。
4.os.Stdin --标准输入,从键盘输入
使用bufio包中的os.Stdin也可以进行标准输入:
Go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//窗机哪一个从键盘输入的对象 os.Stdin --标准输入,从键盘输入
reader := bufio.NewReader(os.Stdin)
content, e := reader.ReadString('\n')
//判断e不为空,表示有错误产生
if e != nil {
fmt.Println("产生错误", e)
} else {
fmt.Println("获取到的内容:", content)
}
}
这段代码中,有两个返回值:content和e,用content接收从键盘输入的内容,e用来判断是否产生错误,如果对e没有什么操作,可以用下划线取代;
e可以判断代码执行是否产生错误:通过判断e是否等于nil来判断,代码执行正确时,e=nil。
输出
三者的重要区别是:Printf可以格式化输出,需要自己加换行符\n;Println输出会自动加换行符,不能格式化输出;Print不会自动添加换行符和分隔符。
举例演示。
1.Print
Go
package main
import "fmt"
func main(){
var name string
var passwd string
fmt.Println("请输入用户名和密码:")
fmt.Scanf("a=%s b=%s", &name, &passwd) //格式化输入
fmt.Print(name, passwd)
}
这里的输出结果就是:
可以看到,这里的"root"与"123"之间是不会自动出现间隔符的,这就是Print的特点。
2.Printf
Printf在上面输入时也有出现,正如Scanf支持格式化输入一样,Printf支持格式化输出,使用Printf可以让结果按照你想要输出的形式展现。这里也不再详述,上面有例子
3.Println
在介绍输入符的时候使用的基本都是Println,它的特点就是输出之后会自动换行。这里就不再详述。
今天的内容就介绍到这里,如果有问题欢迎留言。