如何使用fmt.scanln从以空格分隔的字符串中读取

Shu*_*tsu 3 string input go

想要“每月30个”,但要获得“ 30个”

package main

import "fmt"

func main() {
    var s string
    fmt.Scanln(&s)
    fmt.Println(s)
    return
}

$ go run test.go
31 of month
31
Run Code Online (Sandbox Code Playgroud)

Scanln与Scan相似,但是在换行符处停止扫描,并且在最后一个项目之后必须有换行符或EOF。

trq*_*ong 6

fmt Scan系列扫描以空格分隔的令牌。

package main

import (
    "fmt"
)

func main() {
    var s1 string
    var s2 string
    fmt.Scanln(&s1,&s2)
    fmt.Println(s1)
    fmt.Println(s2)
    return
}
Run Code Online (Sandbox Code Playgroud)

您可以尝试bufio扫描

package main
import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        s := scanner.Text()
        fmt.Println(s)
    }
    if err := scanner.Err(); err != nil {
        os.Exit(1)
    }
}
Run Code Online (Sandbox Code Playgroud)


yee*_*yee 6

如果你真的想包含空格,你可以考虑使用fmt.Scanf()with format %q a double-quoted string safely escaped with Go syntax,例如:

package main

import "fmt"

func main() {
    var s string
    fmt.Scanf("%q", &s)
    fmt.Println(s)
    return
}
Run Code Online (Sandbox Code Playgroud)

运行它并:

$ go run test.go
"31 of month"
31 of month
Run Code Online (Sandbox Code Playgroud)


Ven*_*ula 5

这是工作程序

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    var strInput string
    fmt.Println("Enter a string ")
    scanner := bufio.NewScanner(os.Stdin)

    if scanner.Scan() {
        strInput = scanner.Text()
    }
    
    fmt.Println(strInput)
}
Run Code Online (Sandbox Code Playgroud)

它读取类似“d skd a efju N”的字符串并打印相同的字符串作为输出。

  • 问题专门询问“fmt.scanln”,而不是如何用不同的方法获得相同的结果 (6认同)
  • 我投票了,因为这个问题可以从搜索引擎访问,而且确实有效 (2认同)