2017-05-08 133 views
1

我是學習Golang的新手。我想知道如何使用接受空格作爲輸入的ScanlnGolang的Scanln不接受空格

對不起,有一些常見問題。

+0

它已經做到了。它接受除新行外的所有空白。也許如果你給我們一個你想要掃描的輸入的例子,以及一個顯示你如何掃描它的小程序。 –

回答

3

您不能使用fmt包的Scanln()和類似的功能,你想做的事,因爲從fmt包doc報價:

Input processed by verbs is implicitly space-delimited: the implementation of every verb except %c starts by discarding leading spaces from the remaining input, and the %s verb (and %v reading into a string) stops consuming input at the first space or newline character.

fmt包故意過濾掉空格,這是怎麼回事實現。

取而代之的是使用bufio.Scanner來讀取可能包含您不想過濾掉的空白的行。要從標準輸入讀取/掃描,請使用bufio.NewScanner()函數創建新的bufio.Scanner,並傳遞os.Stdin

例子:

scanner := bufio.NewScanner(os.Stdin) 
if scanner.Scan() { 
    line := scanner.Text() 
    fmt.Printf("Input was: %q\n", line) 
} 

現在,如果你輸入3個空格,然後按輸入,輸出將是:

Input was: " " 

,保持,直到終止應用程序讀取線更完整的示例或輸入"quit",並檢查是否有錯誤:

scanner := bufio.NewScanner(os.Stdin) 
for scanner.Scan() { 
    line := scanner.Text() 
    fmt.Printf("Input was: %q\n", line) 
    if line == "quit" { 
     fmt.Println("Quitting...") 
     break 
    } 
} 
if err := scanner.Err(); err != nil { 
    fmt.Println("Error encountered:", err) 
} 
+0

令人驚訝的是,我還沒有完全閱讀有關fmt包的所有文檔,謝謝@icza – fauzanrazandi

+0

感謝您的解決方案。無論如何,這讓我感到困惑,從「掃描線()」明顯縮短的命令不會讀直到線結束。 – C4u