标准的输入输出: 

按值读取

package main

import "fmt"

func main() {
// 读入一个值,空格和换行都算分隔符
var input1, input2 string
fmt.Scanf("%v", &input1)
fmt.Scan(&input2)
// 读取一行
var input3 string
fmt.Scanln(&input3)
fmt.Printf("input1 = %+v,input2 = %+v\ninput3 = %+v\n", input1, input2, input3)
}

go的切片的输入输出以及标准输入输出_golang 注意,​​​fmt.Scan​​​ 和 ​​fmt.Scanln​​ 的区别

  • ​fmt.Scan​​ 是一个阻塞函数,只要还有没有接受完的参数,无论是 空格 还是 回车,都会不断的接受,直到接受完为止。
  • ​fmt.Scanln​​ 也是一个阻塞函数,但他只能接受用 空格 分开的参数,只要一旦遇到 回车 ,阻塞函数就会停止。

按行读取

读取一行数据,这一行数据中可以出现空格、特殊字符等。

package main

import (
"bufio"
"fmt"
"os"
)

func main() {
reader := bufio.NewReader(os.Stdin)
// 读取一行字符串,包含空格等特殊字符
line, _ := reader.ReadString('\n')
fmt.Println(line)
// 读取一行数据
readLine, _, _ := reader.ReadLine()
fmt.Println(string(readLine))
}

go的切片的输入输出以及标准输入输出_特殊字符_02

切片输入

先输入元素个数,在输入每个元素。

package main

import (
"fmt"
)

func main() {
var count int
fmt.Scanf("%d",&count)
var slice []int
for i := 0; i < count; i++ {
var element int
fmt.Scan(&element)
slice=append(slice,element)
}
fmt.Println(slice)
}

go的切片的输入输出以及标准输入输出_golang_03

多行输入(循环输入)

文件读取:读取到末尾时​​err​​​为​​EOF(end of file)或者在终端结束(control+c)​

package main

import (
"fmt"
"io"
)

func main() {
var a, b int
for {
_, err := fmt.Scan(&a, &b)
if err == io.EOF {
break
}
fmt.Println(a + b)
}
}

 文件读取方式在赛码官方中也有表达到

package main

import "fmt"
import "io"

func main() {
a := 0
b := 0
for {
_, err := fmt.Scanf("%d%d", &a, &b)
if err != nil {
if err == io.EOF {
break
}
} else {
fmt.Printf("%d\n", a+b)
}
}
}

 循环读取:可以​​终端结束(control+c)​

package main

import "fmt"

func main() {
var n,v int
for {
fmt.Scan(&n,&v)
fmt.Println(n+v)
}
}

go的切片的输入输出以及标准输入输出_golang_04