2014-12-11 98 views
1

我剛剛開始使用GO,並且我明白SCANF在GO中使用空格作爲分隔符。golang接受空格輸入

fmt.Scanf("%s",&input) 

我真的找不到一種方法來接受包含空格作爲有效字符的輸入。

+0

你說你不想把空格字符當作分隔符。什麼字符可以作爲分隔符? – 2014-12-11 04:06:42

+2

當用戶按下Enter鍵時表示輸入結束 – av192 2014-12-11 04:17:38

回答

4

當用戶按下輸入它標誌着輸入

這看起來像fmt.Scanln

Scanln類似於Scan結束,但在換行和最後一個項目後停止掃描必須有換行符或EOF。

+0

程序自行運行,並且在使用此功能時不等待用戶輸入。 – av192 2014-12-12 04:53:40

+0

@ av192考慮到它們各自的實現方式很奇怪(https://github.com/golang/go/blob/439b32936367c3efd0dadab48dd51202e1a510f1/src/fmt/scan.go#L131-L148) – VonC 2014-12-12 06:58:13

+0

引用的文檔提到了掃描。從掃描:「...將連續的空格分隔的值存儲到連續的參數中。」如果你想捕捉來自stdin的整個輸入,我建議bufio.NewScanner(os.Stdin)。 – sethammons 2017-02-19 16:48:09

8

可以使用bufio.Reader和os.Stdin:

import(
    "bufio" 
    "os" 
) 

in := bufio.NewReader(os.Stdin) 

line, err := in.ReadString('\n') 
+0

您能否詳細說明您的答案,並添加關於您提供的解決方案的更多描述? – abarisone 2015-06-12 14:53:15

+0

我認爲解決方案是通過在golang中使用「bufio」庫來獲得輸入。 http://golang.org/pkg/bufio/ – rchlin 2015-06-12 15:00:17

5

到@ chlin的答案類似,使用BUFIO捕捉到整行。

fmt Scan方法將每個空格分隔值存儲爲一個連續的參數。標準輸入三個參數需要類似:

package main 

import "fmt" 

func main() { 
    var day, year int 
    var month string 
    fmt.Scanf("%d %s %d", &day, &month, &year) 
    fmt.Printf("captured: %d %s %d\n", day, month, year) 
} 

如果你不知道你會讀什麼的全格式,只想行,使用BUFIO:

package main 

import (
    "bufio" 
    "os" 
) 

func main(){ 
    scanner := bufio.NewScanner(os.Stdin) 
    scanner.Scan() // use `for scanner.Scan()` to keep reading 
    line := scanner.Text() 
    fmt.Println("captured:",line) 
} 
+0

正是我需要的,謝謝! – Loaf 2017-12-06 15:25:21