Golang:fmt.Printf stdout的挂起发生在fmt.scan的for循环旁边
问题描述:
As title, it's hard for me to describe the problem. So I showed the sample code, input and output below.
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
", a)
}
}
Input
a b c
d e f
g h i
Expected Output
a
d
g
However, the actual output printed "a", "d" first. Then, after pressing return (enter) key, "g" was printed. This was actual output.
Update
If I pasted whole nine characters, the third iteration was hung. However, if I merely enter character one after another, it met the expected output.
答
How did you enter that input without a return (enter) ?
If you run this interactively and actually typing in all the input I think you'll understand the reason for the output.
You will have to:
- Type
a b c
- nothing will output yet as the thirdScan
does not know ifc
is all you'll type - Press
return (enter)
- only at this point you'll see thea
output - Do the same for the other lines
Take a look at the doc for Scan
which explains this as well: