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 關注
- 275 瀏覽
添加回答
舉報