Golang:fmt.Printf stdout的挂起发生在for循环中的fmt.Scan stdin旁边

时间:2017-09-14 15:55:29

标签: go

作为标题,我很难描述问题。所以我在下面展示了示例代码,输入和输出。

package main

import (
    "fmt"
)

func main() {
    for i := 1; i <= 3; i++ {
        var a, b, c string
        fmt.Scan(&a)
        fmt.Scan(&b)
        fmt.Scan(&c)
        fmt.Printf("%s\n", a)
    }
}

输入

a b c
d e f
g h i

预期产出

a
d
g

然而,实际输出首先打印“a”,“d”。然后,在按返回(输入)键后,打印“g”。这是实际输出。

更新

如果我粘贴了整个九个字符,则第三次迭代被挂起。 但是,如果我只是一个接一个地输入字符,它就会达到预期的输出。

1 个答案:

答案 0 :(得分:2)

如果没有返回(输入)

,您是如何输入该输入的?

如果您以交互方式运行并实际输入所有输入,我认为您将理解输出的原因。

你必须:

  • 输入<label> - 由于第三个a b c不知道Scan是否只是您输入的所有内容,因此不会输出任何内容
  • c - 此时此刻您将看到return (enter)输出
  • 对其他行做同样的事情

请查看a的文档,该文档也解释了这一点:

https://golang.org/pkg/fmt/#Scan