我刚开始学GO,我了解到SCANF在GO中使用空格作为分隔符。
fmt.Scanf("%s",&input)
我无法找到一种接受包含空格的输入作为有效字符的方法。
您可以使用bufio.Reader和os.Stdin:
import(
"bufio"
"os"
)
in := bufio.NewReader(os.Stdin)
line, err := in.ReadString('\n')
This is a string\n
,而我希望它是 This is a string
。 - VyomYdvin := bufio.NewReader(os.Stdin)
line, err = in.ReadString('\n')
去掉 ":=",只使用等号。 - Facundo Padilla与@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)
}
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Please enter a string: ")
text, _ := reader.ReadString('\n')
text = strings.TrimSpace(text) // Remove any surrounding whitespace including the newline.
fmt.Printf("You entered: %s", text)
}