猿问

golang从sdin扫描一行数字

我正在尝试从 stdin 中读取输入,例如


3 2 1<ENTER>

并将其保存在整数列表中。目前我的代码如下所示:


nums = make([]int, 0)

var i int

for {

    _, err := fmt.Scan(&i)

    if err != nil {

        if err==io.EOF { break }

        log.Fatal(err)

    }

    nums = append(nums, i)

}

目前程序永远不会离开 for 循环。我找不到在文档中检查换行符的简单方法。我该怎么做?


编辑:


由于我知道几乎肯定会有四个数字,因此我尝试了以下操作:


var i0,i1,i2,i3 int

fmt.Scanf("%d %d %d %d\n", &i0, &i1, &i2, &i3)

但这仅扫描了第一个数字,然后退出了程序。我不确定这是否是因为我使用的 z-shell。


编辑:


为了澄清,程序将暂停并要求用户输入由空格分隔并以换行符终止的 n 个数字的列表。这些数字应该存储在一个数组中。


qq_遁去的一_1
浏览 243回答 3
3回答

芜湖不芜

好吧,我决定拿出大 bufio 锤子,这样解决:in := bufio.NewReader(os.Stdin)line, err := in.ReadString('\n')if err != nil {&nbsp; &nbsp; log.Fatal(err)}strs := strings.Split(line[0:len(line)-1], " ")nums := make([]int, len(strs))for i, str := range strs {&nbsp; &nbsp; if nums[i], err = strconv.Atoi(str); err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }}看起来确实有很多代码,但它确实有效。

温温酱

看来你想要https://golang.org/pkg/fmt/#Fscanln就像是ok := func(err error) { if err != nil { panic(err) } }for {&nbsp; var i, j, k int&nbsp; _, err := fmt.Fscanln(io.Stdin, &i, &j, &k)&nbsp; ok(err)&nbsp; fmt.Println(i, j, k)}

偶然的你

我会建议使用带有“scan()”方法的“bufio”包。以下是我从“stdin”读取两行并将这些行存储到数组中的代码。希望这对你有帮助。package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "bufio"&nbsp; &nbsp; "os"&nbsp; &nbsp; "strconv"&nbsp; &nbsp; "strings")func ReadInput() []string{&nbsp; &nbsp; var lines []string&nbsp; &nbsp; scanner := bufio.NewScanner(os.Stdin)&nbsp; &nbsp; for scanner.Scan() {&nbsp; &nbsp; &nbsp; &nbsp; lines = append(lines, scanner.Text())&nbsp; &nbsp; &nbsp; &nbsp; //count, _ := strconv.Atoi(lines[0])&nbsp; &nbsp; &nbsp; &nbsp; if len(lines) == 2 { break }&nbsp; &nbsp; }&nbsp; &nbsp; if err := scanner.Err(); err != nil {&nbsp; &nbsp; fmt.Fprintln(os.Stderr, err)&nbsp; &nbsp; }&nbsp; &nbsp; return lines}func main(){&nbsp; &nbsp; lines&nbsp; &nbsp;:= ReadInput()&nbsp; &nbsp; count ,_ := strconv.Atoi(lines[0])&nbsp; &nbsp; num := strings.Fields(lines[1])&nbsp; &nbsp; if count != len(num) { os.Exit(0) }&nbsp;// Do whatever you want here}将接受两行。第一行会有一个计数。第二行将包含所有数字。您可以根据需要修改相同的代码。例子:31 5 10&nbsp;
随时随地看视频慕课网APP

相关分类

Go
我要回答