String 如何使用fmt.scanln读取由空格分隔的字符串

String 如何使用fmt.scanln读取由空格分隔的字符串,string,input,go,String,Input,Go,想要“30个月”但得到“30” Scanln与Scan类似,但在换行时停止扫描,并且在最后一项之后必须有换行或EOF fmt扫描系列扫描空间分隔的令牌 package main import ( "fmt" ) func main() { var s1 string var s2 string fmt.Scanln(&s1,&s2) fmt.Println(s1) fmt.Println(s2) return } 你可

想要“30个月”但得到“30”

Scanln与Scan类似,但在换行时停止扫描,并且在最后一项之后必须有换行或EOF


fmt扫描系列扫描空间分隔的令牌

package main

import (
    "fmt"
)

func main() {
    var s1 string
    var s2 string
    fmt.Scanln(&s1,&s2)
    fmt.Println(s1)
    fmt.Println(s2)
    return
}
你可以试试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)
    }
}

如果您真的想包含空格,您可以考虑使用<代码> fMT.ScSfF()/>代码>格式<代码> %q:双引号字符串,用GO语法< /代码>安全地逃出,例如:

package main

import "fmt"

func main() {
    var s string
    fmt.Scanf("%q", &s)
    fmt.Println(s)
    return
}
运行它并:

$ go run test.go
"31 of month"
31 of month

这是工作程序

package main

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

func main() {
    var strInput, strInputLowerCase string
    var bFindI, bFindN, bFindA bool

    fmt.Println("Enter a string ")

    scanner := bufio.NewScanner(os.Stdin)
    if scanner.Scan() {
        strInput = scanner.Text()

    }
    fmt.Println(strInput)

}
它读的字符串像“d skd a efju N”
并打印与输出相同的字符串。

thx…但是如果我将
fmt.Println(s)
放在循环外部,则不会输出任何值。如何停止loopfunc main(){scanner:=bufio.NewScanner(os.Stdin),如果确定:=scanner.Scan();确定{fmt.Println(scanner.Text())}}}scanner.Scan()将在end ScansSecond代码运行良好时返回bool。为什么在for循环之后要检查错误?如果出现错误,是否在此执行if-else块?因为前面有一个无限的for循环。@trquoccuong-我有和上面的Ishan相同的查询,在fmt.Println之后检查错误,是否会破坏东西?打印扫描后,您正在检查scanner.Err()?我必须使用if语句而不是for循环,以便程序在第一次输入后继续运行。如果我使用for循环,程序将永远要求我输入。如果我使用for循环,我将如何摆脱循环?这个问题专门针对
fmt.scanln
,而不是如何用不同的方法获得相同的结果,我投票赞成,因为这个问题可以从搜索引擎访问,而且确实有效
package main

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

func main() {
    var strInput, strInputLowerCase string
    var bFindI, bFindN, bFindA bool

    fmt.Println("Enter a string ")

    scanner := bufio.NewScanner(os.Stdin)
    if scanner.Scan() {
        strInput = scanner.Text()

    }
    fmt.Println(strInput)

}