String 如何使用fmt.scanln读取由空格分隔的字符串
想要“30个月”但得到“30” Scanln与Scan类似,但在换行时停止扫描,并且在最后一项之后必须有换行或EOFString 如何使用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 } 你可
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)
}