Go 从标准输入读取数据

fmt.Scan系列

fmt.Scan函数定义如下:

// Scan scans text read from standard input, storing successive space-separated values into successive arguments.
// Newlines count as space. 
// It returns the number of items successfully scanned.
// If that is less than the number of arguments, err will report why.
func Scan(a ...any) (n int, err error) {
	return Fscan(os.Stdin, a...)
}

使用fmt.Scan扫描到空格的时候,就会结束扫描。在acm类比赛中,输入时数据可能按空格拆分,所以读取完整的数据十分不便,需要借助循环才能达到目的。

package main

import "fmt"

func main() {
	str := ""
	fmt.Scan(&str)
	fmt.Println(str)
}

输入hello ffff
只能扫描到第一个完整的单词,hello
Go 从标准输入读取数据_第1张图片
当需要扫描多个用空格分隔的字符串时候,使用循环来读取后续字符串

package main

import (
	"fmt"
)

func main() {
	str := ""
	for {
		n, err := fmt.Scan(&str)
		fmt.Println(n, err, str)
		if err != nil {
			break
		}
	}
}

按ctrl + c组合键可终结输入,可以看到,当读入ctrl+c终结符的时候,err 保存了EOF(文件尾标志)。hi与hey之间有多个空白字符,按一个处理。
Go 从标准输入读取数据_第2张图片

bufio.NewScanner(os.Stdin)系列

package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	isOk := scanner.Scan()
	fmt.Println(isOk)
	text := scanner.Text() // 获取string
	fmt.Println(text)
	bytes := scanner.Bytes() // 获取byte切片
	fmt.Println(bytes)
}

bufio.NewScanner可以按整行读取字符串,同时Text方法返回字符串,Bytes方法返回字节切片
在这里插入图片描述

你可能感兴趣的:(Go,golang,开发语言,后端)