需求:获取多组输入,每组一行,两个数据以空格隔开
使用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循环外面即可