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

时间:2016-01-07 03:47:28

标签: 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
  

Scanln与“扫描”类似,但在换行符处停止扫描,在最终项目之后必须有换行符或EOF。

3 个答案:

答案 0 :(得分:5)

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
}

您可以尝试bufio scan

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)
    }
}

答案 1 :(得分:2)

如果您确实要包含这些空格,可以考虑使用格式为fmt.Scanf()的{​​{1}},例如:

%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
}

答案 2 :(得分:0)

这是工作程序

diff=[]
ListV=[v0,v1,v2,v3,v4,v5,v6,v7,v8,v9]
for j in range(0,10):
    i=np.where(y==j)
    for k in range(0,len(i[0][:])):
        for l in range(0,9-j):
            diff.append(distance.euclidean(ListV[j+l],data[i[0][k],:]))

读取类似“ d skd a efju N”的字符串 并输出与输出相同的字符串。