Overview
- fmt.Scan
- 输入,不换行,并且若定义多个值,则必须输入指定个数的值才会结束,否则持续等待
- fmt.Scanln
- 输入并换行,以回车结束
- fmt.Scanf
- 格式化输入
- os.stdin
- 系统输入,在系统中,终端输入都会写入到os.stdin中,则可以读取os.stdin中的一行值
Description
1)fmt.Scan
package main
import "fmt"
func main() {
var name string
fmt.Print("Please enter your name: ")
fmt.Scan(&name)
fmt.Println(name)
}
2)fmt.Scanln
package main
import "fmt"
func main() {
var name string
var age int
fmt.Print("Please enter your name and age: ")
fmt.Scan(&name, &age)
fmt.Println(name, age)
}
3)fmt.Scanf
格式化输出必须按照模板进行输出,然后才会提取Scan中的值,否则无法输出结果
package main
import "fmt"
func main() {
var name string
fmt.Print("Please enter your name and age: ")
fmt.Scanf("我的名字是%s", &name)
fmt.Println(name)
}
若在字符串占位符后有其他一样类型的数据,则无法读取出指定的值,所以在Go中占位符后需要加一个空格来完善
错误例子:
package main
import "fmt"
func main() {
var name string
var age int
fmt.Print("Please enter your name: ")
fmt.Scanf("我的名字是%s我今年%d了", &name, &age)
fmt.Println(name, age)
}
正确例子:
package main
import "fmt"
func main() {
var name string
var age int
fmt.Print("Please enter your name: ")
fmt.Scanf("我的名字是%s 我今年%d了", &name, &age)
fmt.Println(name, age)
}
4)os.Stdin
在fmt.Scanln中,每一个空格都代表了是一个内容的结束,所以是无法按照有空格的形式输入一行内容,比如My name is Jeremy
因此可以使用os.stdin来输入一行终端输入的内容并加以输出(os.Stdin是标准输入,终端输入的内容都会在这个文件中
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
Reader := bufio.NewReader(os.Stdin)
line, isPrefix, err := Reader.ReadLine()
fmt.Println(string(line))
fmt.Println(isPrefix)
fmt.Println(err)
}
bufio.NewReader(bufio.NewReader的功能是读取os.Stdin中的数据):
bufio.NewReader(os.Stdin)
从bufio.NewReader中读取的内容,需要定义变量给予赋值:
变量:= bufio.NewReader(os.Stdin)
我们需要的是读一行,读一行在这里使用的是Readline:
变量.Readline
Readline默认有3个变量:line,isPrefix,err, 我们需要将line输出:
line,isPrefix,err := 变量.Readline()
line需要以string进行输出fmt.Println(string(line)
fmt.Println(string(line)
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
Data := bufio.NewReader(os.Stdin)
line, _, _ := Data.ReadLine()
fmt.Println(string(line))
}
不想输出esPrefix和err可以用_来占位