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循环外面即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ACM竞赛中,通常会有多组输入数据需要处理。根据给出的代码示例,可以看到输入数据有多组,每组数据以空格隔开的整数表示。每行的整数数量不固定,且不知道数量。输出需要求和的结果。 为了读取输入数据,你可以使用fmt包中的Scan函数,该函数可以读取从标准输入获取的数据。 可以按照以下步骤来读取输入数据: 1. 使用fmt.Scan函数读取变量t,该变量表示每组数据中整数的数量。 2. 使用一个循环,该循环次数为t次,用来读取每个整数并求和。 3. 在循环中,使用fmt.Scan函数读取变量a,该变量表示当前要求和的整数。 4. 将读取的整数累加到sum变量中。 5. 循环结束后,输出sum变量的值。 下面是一个示例代码,用来实现上述步骤: ```go package main import ( "fmt" ) func main() { var t int for { var sum int n, _ := fmt.Scan(&t) if n == 0 { break } else { a := make([]int, t) for i := 0; i < t; i++ { fmt.Scan(&a[i]) } for i := 0; i < t; i++ { sum += a[i] } } fmt.Println(sum) } } ``` 此代码示例使用了一个无限循环来处理多组输入数据,直到输入的整数为0才退出循环。每次循环开始时,sum变量被重置为0,用来计算当前组数据的和。在内部循环中,通过make函数创建了一个切片a来存储每个整数,然后将每个整数累加到sum变量中。最后,输出sum变量的值。 希望这个回答对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值