3 回答
TA贡献1796条经验 获得超7个赞
好吧,我决定拿出大 bufio 锤子,这样解决:
in := bufio.NewReader(os.Stdin)
line, err := in.ReadString('\n')
if err != nil {
log.Fatal(err)
}
strs := strings.Split(line[0:len(line)-1], " ")
nums := make([]int, len(strs))
for i, str := range strs {
if nums[i], err = strconv.Atoi(str); err != nil {
log.Fatal(err)
}
}
看起来确实有很多代码,但它确实有效。
TA贡献1752条经验 获得超4个赞
看来你想要https://golang.org/pkg/fmt/#Fscanln
就像是
ok := func(err error) { if err != nil { panic(err) } }
for {
var i, j, k int
_, err := fmt.Fscanln(io.Stdin, &i, &j, &k)
ok(err)
fmt.Println(i, j, k)
}
TA贡献1841条经验 获得超3个赞
我会建议使用带有“scan()”方法的“bufio”包。以下是我从“stdin”读取两行并将这些行存储到数组中的代码。希望这对你有帮助。
package main
import (
"fmt"
"bufio"
"os"
"strconv"
"strings"
)
func ReadInput() []string{
var lines []string
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
lines = append(lines, scanner.Text())
//count, _ := strconv.Atoi(lines[0])
if len(lines) == 2 { break }
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, err)
}
return lines
}
func main(){
lines := ReadInput()
count ,_ := strconv.Atoi(lines[0])
num := strings.Fields(lines[1])
if count != len(num) { os.Exit(0) }
// Do whatever you want here
}
将接受两行。第一行会有一个计数。第二行将包含所有数字。您可以根据需要修改相同的代码。
例子:
3
1 5 10
- 3 回答
- 0 关注
- 242 浏览
添加回答
举报