2017-09-14 20 views
1

作爲標題,我很難描述問題。所以我在下面展示了示例代碼,輸入和輸出。Golang:fmt.Printf stdout的掛起發生在for循環中fmt.Scan stdin旁邊

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 

但是,實際的輸出印有 「一」, 「d」 之首。然後,按返回(輸入)鍵,打印出「g」。這是實際產出。


更新

如果我粘貼整個九個字符,第三次迭代被掛。然而,如果我只是一個接一個地輸入字符,它就會達到預期的輸出。

+1

你看到預期的行爲......你想要什麼,你沒有看到? ...除了互動之外,您還可以將輸入保存到文件中,然後發出'cat/my/file | myprogram'然後你會看到a,d和g分別在它自己的行上 –

+0

在第三個interation中,它會在掃描到&c時掛起,尋找空白。返回(輸入)也被計爲空白。 – bigless

回答

2

您是如何在沒有回報(輸入)的情況下輸入該輸入的?

如果您以交互方式運行並實際輸入所有輸入,我認爲您會理解輸出的原因。

您將有:

  • a b c類型 - 什麼都不會輸出又作爲第三Scan不知道是否c是所有你鍵入
  • return (enter) - 只有在這個時候,你會看到a輸出
  • 執行相同的其他線路

看看該文檔爲Scan這也解釋了這個問題,以及:

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

+0

謝謝。我沒有仔細閱讀手冊。 –