go获取多组输入

需求:获取多组输入,每组一行,两个数据以空格隔开
使用fmt.Scanln和Scan都会用空格截断,无法获取空格之后数据

var x string
fmt.Scanln(&x)
fmt.Println(x)

1.可以使用Scanf解决空格问题,注意添加换行,否则继续读入可能有问题:

var a string
var b string
fmt.Scanf("%s %s\n", &a, &b)
fmt.Println(a, b)

获取多组输入:

package main

import "fmt"

func main() {
	for {
		var a int
		var b int
		_, err := fmt.Scanf("%d %d\n", &a, &b)
		fmt.Println("err", err)
		if err != nil {
			break
		}
		fmt.Println(a + b)
	}
}

输出为:

23 354
err <nil>
377
err unexpected newline

第二组输入的时候不符合格式要求,退出

2.使用bufio.NewReader(os.Stdin)读取:

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	for {
		reader := bufio.NewReader(os.Stdin)
		msg, _ := reader.ReadString('\n')
		msg = strings.TrimSpace(msg)
		if len(strings.Split(strings.TrimSpace(msg), " ")) < 2 {
			break
		}
		ls := strings.Split(strings.TrimSpace(msg), " ")
		a, b := ls[0], ls[1]
		x1, _ := strconv.Atoi(a)
		x2, _ := strconv.Atoi(b)
		fmt.Println(x1 + x2)
	}
}

但是在有些编译器仍然只能获取一组输入,把reader := bufio.NewReader(os.Stdin)放到for循环外面即可

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